ClientID在Artemis的同一应用程序中是否必须唯一

问题描述

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

我想知道JMS 2.0规范是否允许以下​​内容,以及在Artemis中是否可以进行。

  • 在消费方面,我有一个连接工厂。
  • 我在实例化ActiveMQConnectionFactory bean时通过以下方法在工厂上设置了clientID:pip install --user package_name .setClientId("clientId")
  • 然后我有了一个类A,该类在其参数中使用.setEnabledSharedClientId(true)类型。在此类中,有一个send方法,其中检查连接是否存在,如果不存在,则通过ActiveMQConnectionFactory创建连接。
  • 然后我有了另一个类,其中包含一种this.connectionFactory.createConnection();对象。在此类中,有一个A数组。在每个元素中,它包含一个BlockingQueue。本质上,此类的目的是创建创建不同的线程,以在将消息放入消息后使用ArrayBlockingQueue中的消息。每个线程都从它自己的线程中分配的arrayblcokingqueue中读取。

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

解决方法

如JMS 2规范的2.14节所述,<?php if(isset($_POST['btn-send'])) { $Username = $_POST['Uname']; $Email = $_POST['Email']; $Subject = $_POST['Subject']; $Msg = $_POST['msg']; $headers = "From: shashank.171ec116@gmail.com" . "\r\n"; if(empty($Username) || empty($Email) || empty($Subject) || empty($Msg)) { header('Location: send.html?error'); } else { $to = "shashankgs99@gmail.com"; if(mail($to,$Subject,$Msg,$headers)) { header("Location: send.html?success"); } } } ?> 对象支持并发使用。因此,多个线程可以使用相同的<form action="s.php" method="post"> <input type="text" name="Uname" placeholder="User Name" class="form-control mb-2"> <input type="email" name="Email" placeholder="Email" class="form-control mb-2"> <input type="text" name="Subject" placeholder="Subject" class="form-control mb-2"> <textarea name="msg" class="form-control" placeholder="Message"></textarea> <button name="btn-send" class="btn btn-success"> Send </button> </form> 创建This XML file does not appear to have any style information associated with it. The document tree is shown below. <Error> <Code>MethodNotAllowed</Code> <Message>The specified method is not allowed against this resource </Message> <Method>POST</Method> <ResourceType>OBJECT</ResourceType> <RequestId>A93DA3F4FB7D3508</RequestId> </Error> 的实例。

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

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

...

JMS定义的客户端标识符的唯一用途是其在标识未共享的持久预订中的强制性使用,或在标识共享的持久或非持久预订中的可选用途。

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

另外,值得注意的是,javax.jms.ConnectionFactory实际上是一种内部方法,设计用于JCA资源适配器,并且在某些情况下涉及向后兼容性。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...