Публикация разных типов событий в разных очередях - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь создать простой проект для микросервисов, чтобы научиться работать с Axon Framework.

Я настроил обмен сообщениями через 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 Framework, будут отправлены в QueueA.Но теперь я хочу, чтобы все события EventA переходили в QueueA, а все события EventB - в QueueB.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

По умолчанию Axon Framework использует имя пакета события в качестве ключа маршрутизации AMQP.Это означает, что вы можете привязывать очереди к обмену темами, используя шаблоны для сопоставления с этими ключами маршрутизации.См. https://www.rabbitmq.com/tutorials/tutorial-five-java.html для получения дополнительной информации.

Вы можете настроить поведение Аксона, предоставив пользовательскую RoutingKeyResolver (простая функция, которая возвращает String для данного EventMessage).Затем это настраивается в AMQPMessageConverter, который отвечает за создание сообщения AMQP на основе сообщения события Axon (и наоборот).Вы можете использовать DefaultAMQPMessageConverter, если вы в порядке с форматом сообщений AMQP по умолчанию.

0 голосов
/ 13 июня 2018

однако вы используете fanoutExchange, поэтому он будет помещать события во все очереди, вам нужно просто создать другую очередь и связать с sameExchange и Query-side, с которой вы можете обработать событие

...