我正在尝试更新消费者标签,使其比随机生成的字符串提供更多信息。我们使用的模式包括主机名+标识符+随机字符串。这在我们的其他服务中工作得很好(即: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(使用前将#替换为@)