如何在 spring-amqp 中设置消费者标签值

2023-12-21

我正在尝试更新消费者标签,使其比随机生成的字符串提供更多信息。我们使用的模式包括主机名+标识符+随机字符串。这在我们的其他服务中工作得很好(即:NodeJS 和ampqlib)因为它们提供了一种传递该值的机制。

但是,对于我们的 Java 服务,我们使用spring-amqp看起来没有办法传递消费者标签值。我看了一下BlockingQueueConsumer目前它被硬编码为空字符串:

String consumerTag = this.channel.basicConsume(queue, this.acknowledgeMode.isAutoAck(), "", false, this.exclusive,
            this.consumerArgs, this.consumer);

除了创建我们自己的消费者类型之外,还有什么方法可以让它不成为空字符串(这将导致随机生成的字符串)?

Thanks!


你是对的;当前不可配置;请打开一个改进JIRA https://jira.spring.io/browse/AMQP我们将考虑添加它。应该不需要太多努力。

EDIT

如果使用@RabbitListener,只需将策略实现添加到监听器容器工厂即可;它是@FunctionalInterface所以你可以使用 lambda,例如,与 Spring Boot 一起使用:

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
        SimpleRabbitListenerContainerFactoryConfigurer configurer,
        ConnectionFactory connectionFactory) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    factory.setConsumerTagStrategy(q -> "myConsumerFor." + q);
    return factory;
}

@RabbitListener(queues = "foo")
public void listen(String in) {
    System.out.println(in);
}

and

如果直接连接容器,只需将其添加到容器中即可。

文档在这里 https://docs.spring.io/spring-amqp/reference/html/_reference.html#consumerTags.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 spring-amqp 中设置消费者标签值 的相关文章

随机推荐