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

ActiveMQ-Artemis 2.6使用JMS管理API设置队列死信地址

拓拔霄
2023-03-14

我试图通过JMS管理API为队列设置死信地址。通过阅读最新的Artemis文档,我似乎可以使用queueControl.setdeadletterAddress(...)来完成此操作方法。请参见https://activemq.apache.org/artemis/docs/latest/management.html并搜索“setdeadletteraddress”。

多谢!

共有1个答案

章翔宇
2023-03-14

查看QueueControlImpl类代码,很明显,setDeadLetterAddress操作不再存在。ActiveMQServerControlImpl类中名为addAddressSettings的操作确实提供了为队列设置DLA的功能(以及许多其他设置)。

例如:

Queue managementQueue = ActiveMQJMSClient.createQueue("activemq.management");
Queue replyQueue = ActiveMQJMSClient.createQueue("management.reply");

JMSContext context = connectionFactory.createContext();
JMSConsumer consumer = context.createConsumer(replyQueue)) {
JMSProducer producer = context.createProducer();
producer.setJMSReplyTo(replyQueue);

// Using AddressSettings isn't required, but is provided
// for clarity.
AddressSettings settings = new AddressSettings()
        .setDeadLetterAddress(new SimpleString("my.messages.dla"))
        .setMaxDeliveryAttempts(5)
        .setExpiryAddress(new SimpleString("ExpiryAddress"))
        .setExpiryDelay(-1L) // No expiry
        .setLastValueQueue(false)
        .setMaxSizeBytes(-1) // No max
        .setPageSizeBytes(10485760)
        .setPageCacheMaxSize(5)
        .setRedeliveryDelay(500)
        .setRedeliveryMultiplier(1.5)
        .setMaxRedeliveryDelay(2000)
        .setRedistributionDelay(1000)
        .setSendToDLAOnNoRoute(true)
        .setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
        .setSlowConsumerThreshold(-1)  // No slow consumer checking
        .setSlowConsumerCheckPeriod(1000)
        .setSlowConsumerPolicy(SlowConsumerPolicy.NOTIFY)
        .setAutoCreateJmsQueues(true)
        .setAutoDeleteJmsQueues(false)
        .setAutoCreateJmsTopics(true)
        .setAutoDeleteJmsTopics(false)
        .setAutoCreateQueues(true)
        .setAutoDeleteQueues(false)
        .setAutoCreateAddresses(true)
        .setAutoDeleteAddresses(false);

Message m = context.createMessage();
JMSManagementHelper.putOperationInvocation(m, ResourceNames.BROKER, "addAddressSettings",
        "my.messages", 
        settings.getDeadLetterAddress().toString(),
        settings.getExpiryAddress().toString(),
        settings.getExpiryDelay(),
        settings.isLastValueQueue(),
        settings.getMaxDeliveryAttempts(),
        settings.getMaxSizeBytes(),
        settings.getPageSizeBytes(),
        settings.getPageCacheMaxSize(),
        settings.getRedeliveryDelay(),
        settings.getRedeliveryMultiplier(),
        settings.getMaxRedeliveryDelay(),
        settings.getRedistributionDelay(),
        settings.isSendToDLAOnNoRoute(),
        settings.getAddressFullMessagePolicy().toString(),
        settings.getSlowConsumerThreshold(),
        settings.getSlowConsumerCheckPeriod(),
        settings.getSlowConsumerPolicy().toString(),
        settings.isAutoCreateJmsQueues(),
        settings.isAutoDeleteJmsQueues(),
        settings.isAutoCreateJmsTopics(),
        settings.isAutoDeleteJmsTopics(),
        settings.isAutoCreateQueues(),
        settings.isAutoDeleteQueues(),
        settings.isAutoCreateAddresses(),
        settings.isAutoDeleteAddresses());
producer.send(managementQueue, m);

Message response = consumer.receive();
// addAddressSettings returns void but this will also return errors if the
// method or parameters are wrong.
log.info("addAddressSettings Reply: {}", JMSManagementHelper.getResult(response));
 类似资料:
  • 我有一个使用Spring Cloud Streams-RabbitMQ在微服务中交换消息的项目。对我的项目至关重要的一件事是,我不能丢失任何信息。 null 我是这些框架的新手,我希望你能帮助配置我的...

  • 我正在使用死信频道EIP与骆驼文件中描述的死信频道完全相同。这是我的camel.xml(删除头) 我只有一条路由具有基于内容的路由器,其实质是,如果消息体具有getInfo,则从jms:foo路由到jms:getInfo,如果消息体具有performAction,则从jms.foo路由到jms:performAction 我预计,当jms:getInfo使用者没有运行时,交付将失败,重新交付尝试将

  • 我认为最初的作者认为这将创建一个持久的队列,但显然不是。我找不到这方面的好文档,想知道是否有人能证实/否认这一点。 提前谢了。

  • 我尝试制作示例代码来研究jms。我遇到了一些错误。所以,我搜索了一些解决错误的文章。我放弃了,因为我找不到如何使用spring4在ActiveMQ中设置代理。请给我一些建议或解决问题。 这是一个错误。 这是我的Spring配置文件。 而且,当我尝试设置使用ActiveMQConnectionFactory的CachingConnectionFactory时,它带来了错误。然而,在这个站点(http

  • 问题内容: 我的ActiveMQ服务器中目前有一个名为的队列。每当消息处理失败时,ActiveMQ都会创建一个默认目录。是否可以将该名称更改为类似的名称?原因是将来我可能会有几个队列,而我希望它像 问题答案: 您要查找的东西称为,在此过程中,ActiveMQ为每个队列/主题创建特定的DLQ, 您可以按如下,通过调整你实现它有点 此配置将创建名称为的DLQ ,如果您不需要前缀,则可以删除属性。 希望

  • 我正在尝试实现一个策略,当activemq队列中的消息过期时,不会被移动到默认的死信队列ActiveMQ。DLQ,他们会去另一个死信队列。 我的应用程序使用camel-context进行路由和bean定义。我看了http://ActiveMQ . Apache . org/message-re delivery-and-dlq-handling . html,不确定如何实现individualDe