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

在Artemis的同一应用程序中,客户ID是否必须是唯一的

岳英锐
2023-03-14

这是我所拥有的:我们有2个应用程序,一个生产和一个消费。两者都运行在不同的JVM上。它们向持久主题发送消息,并使用相同的ClientId。

我想知道在JMS 2.0规范下是否允许这样做,以及在Artemis中这样做是否可以。

  • 在消费方面,我有一个连接工厂
  • 在实例化ActiveMQConnectionFactoryBean时,我通过以下方法在工厂上设置clientID:<code>。setClientId(“clientId”)和。setEnabledSharedClientId(true)
  • 然后,我有一个类a,它在参数中接受ActiveMQConnectionFactory类型。在这个类中有一个send方法,它检查连接是否存在,如果不存在,它通过<code>this.connectionFactory.createConnection()创建连接
  • 然后,我有另一个类,它采用<code>类型,其中包含一个<code>对象。在这个类中有一个<code>BlockingQueue<code>数组。在每个元素中,它包含一个<code>ArrayBlockingQueue

现在我的问题是这在JMS 2.0规范下是允许的吗?在从ONE/SAME ConnectionFactory创建的不同线程上创建连接可以吗?每个线程都应该有自己的ClientID吗?

共有1个答案

慕阳文
2023-03-14

正如JMS 2规范的第2.14节所述,javax.jms.ConnectionFactory对象支持并发使用。因此,多个线程使用相同的ConnectionFactory来创建javax.jms.Connection的实例是可以的。

就客户ID而言,这是本规范第6.1.2节中的相关位:

根据定义,由客户端标识符标识的客户端状态一次只能由一个客户端“使用”。

...

JMS定义的客户端标识符的唯一用途是在标识非共享持久订阅时强制使用,或者在标识共享持久订阅或非持久订阅时可选使用。

由于您的消费者似乎正在共享某个主题的持久订阅,因此您对客户端ID的使用是可选的。

此外,值得注意的是< code > org . Apache . ActiveMQ . Artemis . JMS . client . activemqconnectionfactory # setEnableSharedClientID 实际上是一个内部方法,设计用于JCA资源适配器和某些涉及向后兼容性的情况。

 类似资料:
  • 总线尝试从原始ApplicationEvent一次消除处理事件两次,一次从队列中消除。为此,它会检查发送应用程序上下文id,以重新显示当前的应用程序上下文ID。如果服务的多个实例具有相同的应用程序上下文id,则不会处理事件。在本地机器上运行,每个服务将在不同的端口上,这将是应用程序上下文ID的一部分。Cloud Foundry提供了区分的索引。要确保应用程序上下文ID是唯一的,请将spring.a

  • 我正在使用jQuery,我只是想知道,ID必须在整个页面中始终是唯一的吗?类,我知道,可以重复多少次,你喜欢,ID呢?

  • 问题内容: 我正在使用jQuery,我只是想知道,ID在整个页面中是否必须始终唯一?我知道,您可以根据需要将课程重复多次,ID呢? 问题答案: 是的,它必须是唯一的。 id属性指定其元素的唯一标识符(ID)。该值在元素的主子树中的所有ID中必须是唯一的,并且必须包含至少一个字符。该值不得包含任何空格字符。

  • 我想为dynamodb中的订单创建一个表,每个订单由(UserID、date、Unique ID、products和total)组成,我想使用按日期排序的UserID查询特定用户的订单,我想知道如何选择分区键?它必须是独一无二的吗?如果是,我如何才能使它独一无二?在mongodb中,我会根据用户ID共享订单。如何使用dynamodb实现同样的效果?

  • 问题内容: 最近,我将Swing应用程序转换为Webstart。这个过程非常简单,但是我发现在关闭所有窗口之后,应用程序的JVM没有终止。线程转储显示有两个非守护进程线程,特别是Swing的EDT,AWT和几个与Websart相关的线程。 实际使用的策略是,每个窗口在创建时都会增加一个计数器,在关闭时会减少一个。默认关闭操作为DISPOSE_ON_CLOSE。当计数器达到零时,我停止所有线程池并释

  • 问题内容: 我正在尝试发表看法。到目前为止,我已经写了这个: 不幸的是,我在包含 “ CREATE VIEW必须是批处理中唯一的语句” 我怎样才能解决这个问题?! 问题答案: 就像错误所言,该语句必须是查询批处理中的唯一语句。 在这种情况下,您有两种选择,具体取决于您要实现的功能: 将查询放在开头 as select tradename, unitprice, GenericFlag from M