高可用性消息传递的jms顺序

高可用性消息传递的jms顺序,jms,weblogic,high-availability,Jms,Weblogic,High Availability,我已经用weblogic服务器12c建立了统一的分布式队列。我正在尝试使用jms分布式队列实现交付顺序和高可用性。在我的prototpe测试部署中,集群中有两个托管服务器,比如托管服务器1和托管服务器2。每个托管服务器都承载jms服务器,即jms服务器1和jms服务器2。我已经用jdbc持久存储配置了jms服务器。我已启用服务器关联 我有一个生产商在运行,比如java QueupDucer t3::/managed_server1。我发了4条信息。从weblogic监控控制台中,我看到queu中

我已经用weblogic服务器12c建立了统一的分布式队列。我正在尝试使用jms分布式队列实现交付顺序和高可用性。在我的prototpe测试部署中,集群中有两个托管服务器,比如托管服务器1和托管服务器2。每个托管服务器都承载jms服务器,即jms服务器1和jms服务器2。我已经用jdbc持久存储配置了jms服务器。我已启用服务器关联

  • 我有一个生产商在运行,比如java QueupDucer t3::/managed_server1。我发了4条信息。从weblogic监控控制台中,我看到queu中有4条消息,因为队列中还没有消费者
  • 现在我关闭了托管服务器1
  • 让消费者收听java queuconsumer t3://managed_server2。此使用者无法使用消息,因为生产者将所有消息发送到jms服务器1,并且消息已关闭
  • 启动托管服务器1,启动消费者收听t3://managed\u server1我可以获取所有消息 我的问题是,如果托管服务器1出现故障,然后再也没有出现,我是否会丢失所有消息。另外,如果有另一个生产者将消息发送到java QueurDucer t3://managed_server2,则基于这些生产者之间的时间的消息顺序不受限制

    我有点迷路了,我错过了什么。秩序单位能帮助我克服这个问题吗。或者我应该使用分布式主题而不是分布式队列,在分布式队列中,所有jms服务器都将接收来自生产者的所有消息,但是如果我的消费者正在侦听的一个jms服务器失败,那么当我切换到其他jms服务器时,我的应用程序中只有一个消费者,我可能会从一开始就收到消息,而不是从我离开的地方

    任何与此相关的建议都会有所帮助

    好问题

    “我的问题是,如果托管服务器1出现故障,然后再也没有出现,我是否会丢失所有消息?”

    Ans-不,您不会丢失所有消息,它们存储在为部署在托管服务器1上的JMS服务器配置的JDBC存储中。如果希望发送到托管服务器1的消息从托管服务器2使用,则需要配置JMS迁移

    “另外,如果有另一个制作者向java QueurDucer t3://managed_server2发送消息,则基于这些制作者之间的时间的消息顺序不是必需的。顺序单位可以帮助我克服这一问题吗?”

    Ans-如果您希望消息严格按照特定顺序使用,则必须使用顺序单位(UOO)。使用UOO发送消息时,会将消息发送到几个UDQ目的地之一,如果中途该目的地失败,并且启用了迁移,则消息会迁移到下一个UDQ目的地,新的UDQ消息也会传递到新的目的地

    有用链接-

    http://www.youtube.com/watch?v=_W3EJ8p35lI


    希望这有帮助。

    您能确认您使用的是单个JMS连接工厂吗?是的,它确实使用一个JMS连接工厂。SridharS非常感谢您的回复,这是我一直在寻找的。我将在UOO实现的同时尝试自动服务迁移。这确实是启用UOO和JMS迁移时WLS的工作方式。但请注意,迁移时间并非无关紧要,当UOO队列中有数千条消息时,迁移时间可能为“分钟”左右。此外,其他WLS资源不一定与迁移相协调。因此,消息使用者可以在迁移队列之前尝试读取该队列,从而导致JMS连接/队列会话错误(重复),直到迁移完成。