【问题标题】:Check if a Tibco Rendezvous Inbox is valid检查 Tibco Rendezvous 收件箱是否有效
【发布时间】:2018-02-13 15:16:16
【问题描述】:

有没有办法判断 RV 收件箱是否有有效的活动端点?

我有一个客户创建 RV 收件箱的系统。然后将它们传递给系统中的其他组件,这些组件可以使用收件箱向客户端发送消息。

我希望我的系统中有一个 Monitor 进程来了解客户是否已经死亡。监视器将拥有客户端收件箱。

我可以实现心跳机制,但我想知道 RV 中是否有一种机制可以告诉我收件箱是否仍然有效 - 即,在其上发送的消息是否会路由到活动客户端。

我猜 RV 本身必须知道这一点 - 因为它会知道它是否可以向收件箱发送消息。有没有办法让我的代码能够访问这些信息,或者测试收件箱在给定时间是否有效?

【问题讨论】:

    标签: tibco-rv


    【解决方案1】:

    收件箱使用直接连接。来自documentation

    传输对象可以创建收件箱名称, 指定一个独特的目的地 到该传输对象及其过程。 会合软件 使用点对点 使用收件箱主题名称传递邮件的技术。

    而且,直接通信实际上只是 UDP

    直接通信通过 UDP 通道使用 RPTP。

    所以你有两个问题 - 首先,将收件箱映射到 ip 地址和 UDP 端口,第二个,告诉它是否是你想要的。

    我还没有找到解决第一个问题的任何方法 - 那些收件箱是不透明的,但想必聪明的人可以弄清楚。

    对于第二个问题,一般来说似乎不是那么容易解决的问题 - 来自我们的sister site

    UDP 端口只有两种状态:监听或不监听。这通常翻译为“进程在其上打开套接字”或“没有任何套接字打开”。后一种情况应该很容易检测到,因为系统应该使用代码=3(端口不可达)的 ICMP Destination Unreachable 数据包进行响应。不幸的是,许多防火墙可以切断这些数据包,所以如果你没有得到任何回报,你就无法确定端口是否处于这种状态。我们不要忘记 ICMP 也少会话并且不进行重传:Port Unreachable 数据包很可能会在网络上的某个地方丢失。

    我猜,最简单的方法是使用心跳机制。过去,我们有一个围绕 RV 的库,可以将所有客户端和订阅的任何主题(包括收件箱)发布到各种管理流程中。

    【讨论】:

      【解决方案2】:

      (没有真正回答我自己的问题 - 这是来自工作同事的。)

      我在去年必须编写的 RV 桥上工作时遇到了这个问题,因为它正在代理和重写收件箱。事实证明,RV 为某些操作(阻塞操作)创建了“一次性”收件箱,并且没有发送任何消息(无论如何,在该多播上)说收件箱已消失。收件箱的工作方式似乎是:

      • 收件箱对主机的 IP 地址、该主机/传输上客户端的唯一进程 ID 和递增计数器进行编码
      • 发送方只是将单播数据包发送到正确的 IP 和端口(服务)
      • 守护程序(如果它在该服务上有客户端)检查它是否有关于该主题的任何活动订阅(就像多播一样),并将其传递给客户端

      换句话说,接收守护进程必须丢弃在关闭的收件箱中发送的消息,并且没有等效于伴随常规订阅结束的“LISTEN.STOP”消息。

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 2010-12-15
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-15
        相关资源
        最近更新 更多