首页 > 解决方案 > 将不同类型的事件发布到不同的队列

问题描述

我正在尝试创建一个简单的微服务项目来学习使用 Axon 框架。

我已经使用以下代码通过 RabbitMQ 设置了消息传递:

@Bean
public Exchange exchange() {
    return ExchangeBuilder.fanoutExchange("Exchange").build();
}

@Bean
public Queue queue() {
    return QueueBuilder.durable("QueueA").build();
}

@Bean
public Binding binding() {
    return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs();
}

@Autowired
public void configure(AmqpAdmin admin) {
    admin.declareExchange(exchange());
    admin.declareQueue(queue());
    admin.declareBinding(binding());
}

我的 application.properties 中的以下内容:

axon.amqp.exchange=Exchange

使用此配置,通过 Axon 框架发布的所有事件都将发送到 QueueA。但是现在我想让所有 EventA 事件都转到 QueueA,而所有 EventB 事件都转到 QueueB。我怎样才能做到这一点?

标签: javarabbitmqspring-amqpaxon

解决方案


默认情况下,Axon Framework 使用事件的包名作为 AMQP Routing Key。这意味着您可以使用模式将队列绑定到主题交换,以匹配这些路由键。有关更多信息,请参阅https://www.rabbitmq.com/tutorials/tutorial-five-java.html

您可以通过提供自定义RoutingKeyResolver(为给定 EventMessage 返回字符串的简单函数)来自定义 Axon 的行为。然后在 中配置它AMQPMessageConverter,它负责基于 Axon EventMessage 创建 AMQP 消息(反之亦然)。DefaultAMQPMessageConverter如果您对默认的 AMQP 消息格式没问题,您可以使用。


推荐阅读