- Learning RabbitMQ
- Martin Toshev
- 255字
- 2021-07-30 09:47:38
Message router
The following diagram provides an overview of the scenario that we will implement:

Let's say we have a service that triggers an event upon the creation of a new programming seminar, or hackathon, for a given community. We want to send all seminar events to a particular destination receiver and all hackaton events to another destination receiver. Moreover, we want to send messages to the same exchange. For that setup, a topic exchange is a rational choice; one queue will be bound to the topic exchange with the seminar.#
routing key and another queue will be bound with hackaton.#
routing key. The #
character is special and serves as a pattern that matches any character sequence.
We can implement this type of message sending by further extending our Sender
class:
private static final String SEMINAR_QUEUE = "seminar_queue"; private static final String HACKATON_QUEUE = "hackaton_queue"; private static final String TOPIC_EXCHANGE = "topic_exchange"; public void sendEvent(String exchange, String message, String messageKey) { try { channel.exchangeDeclare(TOPIC_EXCHANGE, "topic"); channel.queueDeclare(SEMINAR_QUEUE, false, false, false, null); channel.queueDeclare(HACKATON_QUEUE, false, false, false, null); channel.queueBind(SEMINAR_QUEUE, TOPIC_EXCHANGE, "seminar.#"); channel.queueBind(HACKATON_QUEUE, TOPIC_EXCHANGE, "hackaton.#"); channel.basicPublish(TOPIC_EXCHANGE, messageKey, null, message.getBytes()); } catch (IOException e) { LOGGER.error(e.getMessage(), e); } }
In order to demonstrate event sending, we can use the TopicSenderDemo
class:
public class TopicSenderDemo { private static final String TOPIC_EXCHANGE = "topic_exchange"; public static void sendToTopicExchange() { Sender sender = new Sender(); sender.initialize(); sender.sendEvent(TOPIC_EXCHANGE, "Test message 1.", "seminar.java"); sender.sendEvent(TOPIC_EXCHANGE, "Test message 2.", "seminar.rabbitmq"); sender.sendEvent(TOPIC_EXCHANGE, "Test message 3.", "hackaton.rabbitmq"); sender.destroy(); } public static void main(String[] args) { sendToTopicExchange(); } }
- WildFly:New Features
- Programming ArcGIS 10.1 with Python Cookbook
- C語言最佳實踐
- Mastering Kali Linux for Web Penetration Testing
- SAS數據統計分析與編程實踐
- C++程序設計基礎教程
- Monitoring Elasticsearch
- bbPress Complete
- 劍指Java:核心原理與應用實踐
- Windows Phone 7.5:Building Location-aware Applications
- Android系統級深入開發
- 蘋果的產品設計之道:創建優秀產品、服務和用戶體驗的七個原則
- Instant PHP Web Scraping
- Creating Data Stories with Tableau Public
- Canvas Cookbook