Spring Boot 實現 RabbitMQ 監聽消息的幾種方式
- 1. @RabbitListener 注解方式
- 2. MessageListener 接口方式
- 3. MessageListenerAdapter 適配器方式
- 4. @RabbitHandler 注解方式
Spring Boot 實現 RabbitMQ 監聽消息的方式有以下幾種:
-
@RabbitListener 注解方式:通過在方法上標記
@RabbitListener
注解來監聽指定的隊列,當消息到達時,被注解的方法將被調用。 -
MessageListener 接口方式:實現 Spring AMQP 提供的
MessageListener
接口,編寫自定義的消息監聽器,然后使用SimpleMessageListenerContainer
設置消息監聽器。 -
MessageListenerAdapter 適配器方式:通過
MessageListenerAdapter
類,可以將普通的 Java 方法轉換為消息監聽器,從而簡化消息處理邏輯。 -
@RabbitHandler 注解方式:結合
@RabbitListener
和@RabbitHandler
注解,可以實現多個不同類型消息的處理方法,根據消息內容的不同調用對應的處理方法。
這些方式都可以在 Spring Boot 項目中方便地實現 RabbitMQ 的消息監聽功能。
1. @RabbitListener 注解方式
以下是使用 @RabbitListener
注解方式實現 RabbitMQ 消息監聽的示例代碼:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class RabbitMQListener {@RabbitListener(queues = "myQueue")public void handleMessage(String message) {System.out.println("Received message: " + message);// 在這里處理接收到的消息}
}
在這個示例中,我們創建了一個名為 RabbitMQListener
的類,并使用 @RabbitListener
注解標記 handleMessage
方法,指定監聽名為 “myQueue” 的隊列。當消息到達隊列時,handleMessage
方法將被調用來處理接收到的消息。
2. MessageListener 接口方式
以下是使用 MessageListener
接口方式實現 RabbitMQ 消息監聽的示例代碼:
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;public class MyMessageListener implements MessageListener {@Overridepublic void onMessage(Message message) {System.out.println("Received message: " + new String(message.getBody()));// 在這里處理接收到的消息}public static void main(String[] args) {SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();container.setConnectionFactory(connectionFactory); // 設置連接工廠container.setQueueNames("myQueue"); // 設置監聽的隊列名稱container.setMessageListener(new MyMessageListener()); // 設置消息監聽器container.start(); // 啟動監聽容器}
}
在這個示例中,我們創建了一個實現了 MessageListener
接口的 MyMessageListener
類來處理接收到的消息。然后,我們使用 SimpleMessageListenerContainer
設置連接工廠、隊列名稱和消息監聽器,并啟動監聽容器。當消息到達時,onMessage
方法將被調用來處理接收到的消息。
3. MessageListenerAdapter 適配器方式
以下是使用 MessageListenerAdapter
適配器方式實現 RabbitMQ 消息監聽的示例代碼:
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.SimpleMessageConverter;public class MyMessageListener {public void handleMessage(String message) {System.out.println("Received message: " + message);// 在這里處理接收到的消息}public static void main(String[] args) {SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();container.setConnectionFactory(connectionFactory); // 設置連接工廠container.setQueueNames("myQueue"); // 設置監聽的隊列名稱MessageListenerAdapter adapter = new MessageListenerAdapter(new MyMessageListener());adapter.setDefaultListenerMethod("handleMessage"); // 設置默認處理方法MessageConverter converter = new SimpleMessageConverter();adapter.setMessageConverter(converter); // 設置消息轉換器container.setMessageListener(adapter); // 設置消息監聽適配器container.start(); // 啟動監聽容器}
}
在這個示例中,我們創建了一個 MyMessageListener
類,并定義了一個處理消息的方法 handleMessage
。然后,我們使用 MessageListenerAdapter
類將 MyMessageListener
類中的方法轉換為消息監聽器,并設置默認處理方法。最后,將消息監聽適配器設置到 SimpleMessageListenerContainer
中,并啟動監聽容器來處理接收到的消息。
4. @RabbitHandler 注解方式
使用 @RabbitHandler
注解方式結合 @RabbitListener
注解實現多個不同類型消息的處理示例代碼如下:
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
@RabbitListener(queues = "myQueue")
public class MyMessageHandler {@RabbitHandlerpublic void handleStringMessage(String message) {System.out.println("Received string message: " + message);// 處理字符串類型消息}@RabbitHandlerpublic void handleIntMessage(Integer message) {System.out.println("Received integer message: " + message);// 處理整數類型消息}
}
在這個示例中,我們創建了一個名為 MyMessageHandler
的類,并使用 @RabbitListener
注解標記整個類,指定監聽名為 “myQueue” 的隊列。然后,我們在類中定義了兩個處理消息的方法,分別使用 @RabbitHandler
注解標記,分別處理字符串類型和整數類型的消息。當不同類型的消息到達隊列時,根據消息類型調用對應的處理方法來處理消息。