Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Service 出版及;订阅信息系统“;“共享订阅”;解释(TIBCO EMS)_Service_Message Queue_Publish Subscribe_Producer Consumer_Tibco - Fatal编程技术网

Service 出版及;订阅信息系统“;“共享订阅”;解释(TIBCO EMS)

Service 出版及;订阅信息系统“;“共享订阅”;解释(TIBCO EMS),service,message-queue,publish-subscribe,producer-consumer,tibco,Service,Message Queue,Publish Subscribe,Producer Consumer,Tibco,我正在阅读pdf,为即将到来的项目(TIBCO ESB上的项目)做准备。当我遇到我认为是矛盾的东西时,我只得到了介绍。我意识到我没有掌握这个概念。(我读得再深入一点,找不到答案) 从Ch1(第4页)开始,在发布和订阅部分,我谈到了“共享订阅”: 共享订阅是使用特定名称和客户端ID创建的。共享订阅的使用者在订阅主题时指定此名称 例如,主题foo可能具有以下订阅: •非共享、非持久订阅 •非共享、持久订阅 •称为mySharedSub的共享、非持久订阅,有三个共享 消费者 •名为myDurableS

我正在阅读pdf,为即将到来的项目(TIBCO ESB上的项目)做准备。当我遇到我认为是矛盾的东西时,我只得到了介绍。我意识到我没有掌握这个概念。(我读得再深入一点,找不到答案)

从Ch1(第4页)开始,在发布和订阅部分,我谈到了“共享订阅”:

共享订阅是使用特定名称和客户端ID创建的。共享订阅的使用者在订阅主题时指定此名称

例如,主题foo可能具有以下订阅:

•非共享、非持久订阅

•非共享、持久订阅

•称为mySharedSub的共享、非持久订阅,有三个共享 消费者

•名为myDurableSharedSub的共享持久订阅,有两个共享使用者

如果在foo上收到消息,则上述四个订阅中的每一个都会收到相同的消息。对于共享订阅mySharedSub和myDurableSharedSub,消息仅传递给一个(如果其各自的共享使用者)

如果共享持久订阅myDurableSharedSub的共享使用者已关闭,则共享持久订阅将继续存在并累积消息,直到其被删除,或者直到应用程序创建名为myDurableSharedSub的新持久共享使用者以恢复此订阅。如果mySharedSub的共享使用者都已关闭,则订阅将从topic foo中删除

我的问题是

  • 订阅的“特定名称”有什么意义。您不需要主题中的每个订阅都有某种特定的名称,以便在订阅时可以引用它吗?或者,你订阅一个主题的次数越多,它就会有系统地确定你订阅哪个主题,除非你指定
  • 客户ID会做什么
  • 为什么称为“共享”的订阅只将其消息传递给其一个消费者?对我来说,这似乎是倒退
  • 谢谢你的帮助


    Mingman

    注意,这些概念通常适用于JMS,而不仅仅是TIBCO EMS。让我从最后一个问题开始

    假设您有一个系统,该系统广播有关某个主题的新订单的消息。然后您有另外两个系统,每个系统作为一个进程运行在一台机器上,需要接收这个消息:账单和履行。每个系统都会订阅一个非共享订阅(持久,因为您不想失去订单)

    现在考虑一下当你必须按比例扩展计费系统时会发生什么情况。它现在在两台服务器上运行,每台服务器上运行一个进程,我们称之为Billing1和Billing2。如果Performance、Billing1和Billing2都使用非共享订阅进行订阅,则Billing1和Billing2都将收到每个订单。但这并不是你想要的,因为现在每个订单基本上只需支付两次账单。相反,您希望订单以交替(或负载平衡)的方式发送到Billing1和Billing2。这就是您可以使用共享订阅的目的。您现在可以使用非共享订阅来实现,而使用共享订阅(我们称之为“BillingSubscription”)来实现Billing1和Billing2。现在,第一条订单信息将转到履行和账单1,第二条订单信息将转到履行和账单2,以此类推

    作为旁注,在共享订阅之前,您可以通过将主题绑定到队列并让计费系统订阅此桥接队列来实现类似的效果

    首先,您需要订阅的特定名称来知道哪些系统属于共享订阅。Billing1和Billing2在创建主题订阅时使用相同的订阅名称共享订阅。假设您现在将一个作为三个进程Inv1、Inv2、Inv3运行的库存系统也连接到您的主题。对于这些,您应该使用不同的子分类名称(例如,“InventorySubscription”)

    clientID用于查看客户端是否已收到消息(对于发送消息时客户端处于脱机状态,而其他客户端可能处于联机状态的情况)。请注意,clientID是在连接上设置的(一个连接可以管理对主题和队列的许多订阅)。如果您只使用共享订阅,据我所知,它并没有那么有用。但是,假设您有一个包含对Topic1的持久共享订阅和对Topic2的持久非共享订阅的连接,则clientID将用于确保您在Topic2上接收消息,即使您暂时脱机