当前位置: 首页 > 知识库问答 >
问题:

将多个目的地的JMS消息聚合到单个队列

樊运乾
2023-03-14

将来自许多不同来源(实际上是队列/主题)的消息聚合到单个队列/主题中,然后使用它的最佳方法是什么。我正在尝试设计一个应用程序,以使用weblogic从JMS中的不同主题接收消息。

共有2个答案

公羊招
2023-03-14

关于质量要求的一些建议。我相信你必须考虑它们。它们将与你的技术解决方案高度相关。

>

  • 消息丢失可以接受吗?可以考虑客户端ack。例如,内存队列位于中间,例如传入队列1... n-

    单个传出队列是否可以接受该消息副本?我建议是的。设置适用的级别PossibleDuplicateFlag以使客户端意识到这一点。

    diff传入队列上每秒传入消息的速度有多快?一个队列会话只有一个uniqe线程。必须提前考虑性能。

  • 戚繁
    2023-03-14

    您可以编写自己的“聚合器”作为独立的Java应用程序:

    >

  • 对于每个队列/主题,在其自己的线程中都有一个读取器
  • 每个读卡器在“聚合队列”上再次发送其接收到的消息

    有另一个线程在“聚合队列”上侦听。

    作为变体,您可以使用JVM队列(如java.util.concurrent.ArrayBlockingQueue)作为“聚合队列”。这更快,不需要另一个MQ队列,不需要网络带宽,但它不是持久的。

    另一个想法是为每个传入队列/主题使用“消息驱动bean(MDB)”:

    • 同样,每个MDB只读取消息并将其重新发送到“聚合队列”

  •  类似资料:
    • JMS队列有2个消费者,同步和异步Java应用程序进程等待响应。1)同步应用程序发送请求,并根据JMS相关ID等待响应60秒。2)异步线程将不断侦听同一队列。

    • 下面是我们设置的简化/示意图拓扑 每个节点(服务器)都是一个独立的(无集群)jboss应用服务器(Jboss-as7),包括消息传递服务器。 消息传递服务器部署许多JMS队列。 每个任务服务器为每个队列部署一个MDB,每个队列有许多使用者。 所有消息生产者使用相同的入站适配器,所有消息使用者使用相同的出站适配器。事实上,所有前端节点都是完全相同的(与所有服务器节点相同,配置相同,部署的工件相同)。

    • 我刚刚开始使用RabbitMQ和AMQP。 我有一个消息队列 我有多个消费者,我想用相同的消息做不同的事情。 RabbitMQ的大部分文档似乎都集中在循环(round-robin)上,即单个消息由单个消费者使用,负载在每个消费者之间分散。这的确是我目击的行为。 例如:生产者只有一个队列,每2秒发送一次消息: 这里有一个消费者: 如果我启动消费者两次,我可以看到每个消费者都在以循环行为消费交替消息。

    • 我使用分布式jms队列,weblogic是我的应用服务器。在我的集群环境中部署了三个jms服务器。例如,生产者只是使用队列名称jndi lookup 'udq '来发送消息。现在,我已经为每个jms服务器关联了一个消费者,并且能够消费消息,到目前为止没有问题。 这里有一个问题,我是否可以让一个消费者使用来自3个jms服务器的消息。weblogic允许使用以下语法对目标查找进行jndi命名:@ 我只

    • 我有两个jms消费者,每个都在不同的流中。我想使用另一个流来聚合这两条消息的消息。并且还需要保留相关ID,因为我需要分割有效负载并发送回消息。 我尝试将分散收集与两个入站 VM 一起使用,但收到以下错误: 由以下原因导致:组织.xml.sax.SAXParse 异常:cvc-complex-type.2.4.a:发现以元素“vm:入站终结点”开头的无效内容。“{”http://www.muleso

    • 我设置了一个EJB项目,使用JMS将持久性实体对象发送到MDB。我使用JBoss EAP 7,使用Apache ActiveMQ作为消息传递提供程序。我像这样设置ConnectionFactory和队列: 这是我的消息生成器,它接收“Account”实体对象作为参数并将其发送到队列: EntityEnqueueBean。Java语言 MDB从队列接收消息并对其进行处理: java账户 不确定我做错