我正在阅读这篇文章,它说在fanout以外的消息交换中,消息被路由到与其键匹配的队列中。

如果是这样,那么为什么在以下注释中有两个参数( @Queue valuekey )? 仅指定队列名称还不够吗?

@RabbitListener(bindings = @QueueBinding(value = @Queue(value = RabbitMQConfiguration.AUTHENTICATION_EMAILS_QUEUE, durable = "true"), exchange = @Exchange(value = RabbitMQConfiguration.EMAIL_MESSAGE_EXCHANGE_NAME), key = "accountActivationEmail"))
public void receiveMessage(Map<String, String> message) {
    this.sendEmail(getEmail(message));
}

另一个问题:有了您为侦听器看到的注释,我是否需要有一个单独的@Configuration类来指定MessageListenerAdapterSimpleMessageListenerContainerBindingExchangeQueue ,如下所示:

@Configuration
public class RabbitMQConfiguration {

    public final static String AUTHENTICATION_EMAILS_QUEUE = "AUTHENTICATION_EMAILS_QUEUE";
    public final static String EMAIL_MESSAGE_EXCHANGE_NAME = "EMAIL_EVENTS";

    @Bean
    public Queue authenticationEmailsQueue() {
        return new Queue(AUTHENTICATION_EMAILS_QUEUE, false);
    }

    @Bean
    public DirectExchange emailMessagesExchange() {
        return new DirectExchange(EMAIL_MESSAGE_EXCHANGE_NAME);
    }

    @Bean
    public Binding authenticationEmailMQBinding(Queue queue, DirectExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with(AUTHENTICATION_EMAILS_QUEUE);
    }

    @Bean
    public SimpleMessageListenerContainer authenticationEmailContainer(ConnectionFactory connectionFactory,
    MessageListenerAdapter listenerAdapter) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames(AUTHENTICATION_EMAILS_QUEUE);
        container.setMessageListener(listenerAdapter);
        return container;
    }

    @Bean
    public MessageListenerAdapter authenticationEmailHandlerAdapter(AuthenticationEmailHandler receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

}

  ask by Arian Hosseinzadeh translate from so

本文未有回复,本站智能推荐:

1回复

在RabbitMQ中发布时给出错误的(不存在的)队列名称

我正在使用AyncRabbitTemplate发布消息。 发布时提供了错误的(不存在的)队列名称-它会静默删除该消息。 我尝试在AyncRabbitTemplate上启用“确认”和“任务”,并添加了所需的回调方法,如下所示: 而回调方法为:
2回复

使用RabbitMQ中的给定队列获取以某种方式存在的频道

我正在尝试复制在RabbitMQ Web UI中可以看到的内容-它会告诉我哪些消费者(以其通道的形式)当前连接到给定队列。 我如何从RabbitMQ Java API知道这些信息? 可能吗? 我能找到的最好的方法是如何知道给定队列有多少个消费者,但是没有什么比这更好的了。 如果Jav
1回复

如何在javaspring中收听具有不同名称的RabbitMQ队列?

我有一个聊天应用程序,它将为每个在线用户创建一个队列,我正在尝试为该用户获取所有排队的消息,问题是我只通过通过的消息知道队列的名称和因此我不能使用 @RabbitListener 给它一个队列名称。 除了使用 rabbitTemplate convert 之外,有什么方法可以让我为用户获取所有排队的
1回复

RabbitMQ@RabbitListener注释在Spring中不起作用(不是spring-boot)

我正在尝试在我的 spring-core 开发的应用程序中实现rabbitmq。 下面是我的 pom.xml 这是我的 RabbitConfiguration java 文件 这是我尝试使用兔子的服务类 发送方法工作得很好。 但是@Listener 注释的方法不起作用。 它不听。 我也尝试过,我创建
1回复

异步@RabbitListener中的同步代码?

从RabbitMQ文档,使用@RabbitListener端点异步接收到一条消息: "The easiest way to receive a message asynchronously is to use the annotated listener endpoint infrastruc
1回复

如何在一次调用中获取RabbitMQ中单个队列中存在的所有消息

如何在一次调用中获取在单个队列上发布的所有消息? 我必须开发一个 java rest 端点。 当调用该端点时,我们需要读取该调用期间存在于 RabbitMQ 上的所有消息,我需要终止连接,以便它不会持续侦听。 我是 Rabbit MQ 的新手
3回复

RabbitListener注释上的动态队列

我想使用特定模式的队列名称,例如project.{queue-name}.queue 。 为了保持这种模式稳固,我编写了一个辅助类来从一个简单的标识符生成这个名称。 因此, foo会生成一个名为project.foo.queue的队列。 简单。 但是,注释RabbitListener需要一个常量字符
2回复

使用spEL的多队列RabbitListener

我从RabbitMQ开始我使用Maven创建了一个Spring Boot项目,并且我使用Spring依赖项来使事情正常工作,但是,尝试将队列名称外部化并尝试通过注释使其“多队列”: 正如spring amqp的文档中所提到的那样 从版本1.5开始,您可以使用属性占位符和SpEL外部化队