>
下载Artemis2.13.0,预先创建组播地址测试,然后在此地址上创建组播队列123,使用控制台向123队列发送1消息
使用IDEA创建springboot项目,pom文件导入以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-artemis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>5.2.5.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client</artifactId>
<version>2.13.0</version>
<scope>compile</scope>
</dependency>
pplication.properties添加配置
spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=test
spring.artemis.password=123456
spring.jms.pub-sub-domain=true
创建消费者以接收在队列123中预先创建的消息
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer{
@JmsListener(destination="test::123")
public void consumerMessage(String text){
System.out.println("从queue队列收到的回复信息为:"+text);
}
}
我无法接收该消息,使用2.13.0artemis-jms-client将出现以下错误消息
Setup of JMS message listener invoker failed for destination 'test::123' - trying to recover. Cause: AMQ229019: Queue 123 already exists on address test
Artemis创建一个服务器,并且不修改代理文件。
为JMS用例预先创建多播队列是相当不正常的。通常,您只需使用地址的名称作为应用程序中JMS主题的名称,然后代理将自动在该地址上创建一个队列来表示应用程序的JMS订阅,然后应用程序将接收发送到该地址的任何消息。将JMS概念映射到核心代理实现的语义将在文档中进一步讨论。
但是,如果您的用例迫使您预先创建多播队列,那么您可以使用完全限定的队列名称(即FQQN),它遵循
::
的形式来访问该队列。因此,在您的示例中,您将使用test::123
,例如:@JmsListener(destination = "test::123")
public void receiveQueueMsg(String msg) {
System.out.println("收到的消息为:" + msg);
}
FQQN语法和功能将在文档中进一步讨论。
为此,我修改了ActiveMQ Artemis附带的spring-boot-integration
示例,以使用普通JMS客户机(即,不是AMQP JMS客户机),并将FQQN与多播队列一起使用,所有操作都按预期进行。
我准备使用C#应用程序通过ActiveMQ Artemis发送和接收消息。在选播模式下,一切都在工作。 通常我会收到消息,因为我只是从选播切换到多播,但实际上我什么也没有收到。
当消费者订阅一个主题时,一个多播队列会自动创建一个系统生成的名称。我想知道是否有可能控制这个名称生成以使它更友好(像consumer_idsession_ididx)。 我使用web控制台进行监视,在以前版本的ActiveMQ(在Artemis之前)中,我可以看到每个订阅主题的用户名称,这非常方便。 我以前在ActiveMQ 5.0的web控制台中看到的内容: 我现在在使用Artemis的控制台中
此问题是关于在中使用AMQP消费消息。网文档建议使用amqpnetlite:https://access.redhat.com/documentation/en-us/red_hat_amq/7.0/html-single/using_the_amq_.net_client/index 使用AMQPNetLite订阅地址时,地址和队列将自动创建。不过,自动创建的队列总是“单播”。我无法自动创建 多
因为正如我在Active MQ Artemis文档中看到的,持久值是一个布尔值,但在amqpnetlite库中它是一个uint,我的理解是,超过0的所有内容都应该是true,而0应该是false。 起初,这种行为非常奇怪:即使当Aretemis Web界面显示为持久队列时,一旦没有用户连接,它也会被删除。 我发现:ActiveMQ Artemis queue在关闭消费客户机后被删除,这描述了即使是
我运行生产者,它生成N条消息,我在仪表板上看到它们。当我运行接收器时,它会接收来自队列的所有消息,并且队列为空。 我需要有多个生产者生成消息到同一个队列。多个客户从队列中接收消息。消息将被队列TTL删除。但是现在第一个接收者从队列中获取所有消息。我怎么能做到这一点?