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

JMS队列(点对点消息)到底是如何工作的?

百里金林
2023-03-14

因此我知道JMS的核心组件是:

  1. 消息
  2. 目标
  3. 连接
  4. 会话
  5. MessageProducer
  6. MessageConsumer

据我所知,消息是与其他实体(必须使用这些数据的其他产品)发送和共享的,消息可以有不同的形状:TextMessage、ObjectMessage、MapMessage、BytesMessage和StreamMessage。

好的,根据我的理解,JMS核心组件的目的地组件定义了接收消息的人和发送消息的逻辑。

所以我知道我有两种目的地:

>

  • 队列:定义点对点消息。根据我所了解的情况,我可以有一些Message Producer将生成的消息放入队列,然后我有一些MessageConsumer来消费Message。每个消息可以由单个MessageConsumer使用。

    相反,在第二种情况下,Consumer-1可以Consumer由Producer-1和Produer-2生成的消息,因为MessageProducer在队列中放了一条消息,指定谁是必须使用该消息的MessageConsumer。

    具体是怎么运作的?正确的逻辑是什么?

  • 共有1个答案

    乌和畅
    2023-03-14

    如果我有2个分别命名为Producer-1和Producer-2的MessageProducer,我需要有2个分别命名为Consumer-1和Consumer-2的MessageConsumer,其中Consumer-1使用Producer-1生成的消息,而Consumer-2使用**Producer-2生成的消息)。

    不是真的。消息使用者连接到队列,它将接收放入队列中的所有消息,而不管生产者是谁。因此,如果有两个生产者在队列中分别放入一条消息,那么该消息将被连接到它的单个消费者使用。

    如果您希望由不同的生产者生成针对特定消费者的消息,您应该使用一个称为“消息选择器”的概念。要实现这一点,消息生产者应该向消息中添加“头”(系统头或自定义头),然后消息监听器可以指定它们接收与特定头匹配的消息。

     类似资料:
    • Artemis 2.2.0的新版本有一个,它显然是在内部消息ID(而不是JMS消息ID)上操作的。 问题是:如何在Artemis Version2.x中使用JMS消息ID将消息从一个队列移动到另一个队列?

    • 我们的环境由3个jboss服务器组成(门户、jms、协调)。 协调服务器托管骆驼路由,该路由具有消耗自队列(SLAQueue)的路由 JMS服务器托管了我们的所有队列 最近,我们发现了一个错误,即托管在JMS服务器上的TaskQueue中的一些消息没有传递到门户服务器上的MDB。由于某些原因,它们被卡住了,当我们重新启动JMS服务器时,卡住的消息被传递 为了进行调查,我们在“org.apache.

    • 因此,我使用Spring integration链接JMS和ActiveMQ,如下所示:- 如何使其工作,以便发送到此队列并从中接收消息?请帮忙。

    • 我试图将一些消息从JMS代码放到本地队列管理器中定义的本地队列中。我在WebSphere MQ中定义了一个本地队列,并使用JMS代码放置消息。我在这里做得对吗。我没有看到WebSphere队列中的消息。 以下是代码:

    • 我正在尝试创建一条骆驼路线,它将: 从队列中获取JMS消息,消息体是SOAP请求 这是我的代码: endpoint配置: 我觉得我误解了这个场景中骆驼工作的一些基本原理。似乎是soap信封的存在导致了此问题。我曾假设camel能够获取原始soap消息并将其转换为cxfendpoint的正确消息格式。 有人能向我解释一下如何将SOAP请求传递给CXFendpoint吗?

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