将不同类型的事件发布到不同的队列
Publishing different types of events to different queues
我正在尝试创建一个简单的微服务项目来学习使用 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。我该怎么做?
但是您使用的是 fanoutExchange,因此它会将事件放入所有队列,您只需创建另一个队列并与 sameExchange 和查询端绑定即可处理事件
默认情况下,Axon Framework 使用事件的包名称作为 AMQP 路由密钥。这意味着您可以使用模式将队列绑定到主题交换,以匹配这些路由键。
有关详细信息,请参阅 https://www.rabbitmq.com/tutorials/tutorial-five-java.html。
您可以自定义 Axon 的行为,方法是提供自定义 RoutingKeyResolver
(一个简单的函数,returns 一个给定 EventMessage 的字符串)。然后在 AMQPMessageConverter
中进行配置,它负责创建基于 Axon EventMessage 的 AMQP 消息(反之亦然)。如果您可以使用默认的 AMQP 消息格式,则可以使用 DefaultAMQPMessageConverter
。
我正在尝试创建一个简单的微服务项目来学习使用 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。我该怎么做?
但是您使用的是 fanoutExchange,因此它会将事件放入所有队列,您只需创建另一个队列并与 sameExchange 和查询端绑定即可处理事件
默认情况下,Axon Framework 使用事件的包名称作为 AMQP 路由密钥。这意味着您可以使用模式将队列绑定到主题交换,以匹配这些路由键。 有关详细信息,请参阅 https://www.rabbitmq.com/tutorials/tutorial-five-java.html。
您可以自定义 Axon 的行为,方法是提供自定义 RoutingKeyResolver
(一个简单的函数,returns 一个给定 EventMessage 的字符串)。然后在 AMQPMessageConverter
中进行配置,它负责创建基于 Axon EventMessage 的 AMQP 消息(反之亦然)。如果您可以使用默认的 AMQP 消息格式,则可以使用 DefaultAMQPMessageConverter
。