Mig*_*Mig 5 java amqp spring-amqp
我正在尝试更新消费者标签,使其比随机生成的字符串提供更多信息。我们有一个我们使用的模式,其中包括主机名 + 标识符 + 随机字符串。这在我们的其他服务(即:NodeJS with ampqlib)中工作正常,因为它们提供了一种传递此值的机制。
但是,对于我们的 Java 服务,我们使用spring-amqp并且似乎无法传递消费者标签值。我看了一下,BlockingQueueConsumer它目前被硬编码为一个空字符串:
String consumerTag = this.channel.basicConsume(queue, this.acknowledgeMode.isAutoAck(), "", false, this.exclusive,
this.consumerArgs, this.consumer);
Run Code Online (Sandbox Code Playgroud)
除了创建我们自己的消费者类型之外,有没有办法让它不是一个空字符串(这将导致一个随机生成的字符串)?
谢谢!
你是对的; 它目前不可配置;请打开一个改进 JIRA,我们将看看添加它。应该不会花太多力气。
编辑
如果使用@RabbitListener,只需将策略实现添加到侦听器容器工厂;这是一个@FunctionalInterface让您可以使用lambda,例如,使用Spring引导:
@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);
}
Run Code Online (Sandbox Code Playgroud)
和
如果直接连接容器,只需将其添加到容器中。