MessageListenerAdapter 消息监听适配器
-
MessageListenerAdapter
- queueOrTagToMethodName队列表示与方法名称组成的集合
- 可以一一进行队列与方法名称的匹配
- 队列和方法名称绑定,即指定队列里的消息会被绑定的方法所接受处理
-
代码实现
@Bean
public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
// 监听队列
container.setQueues(queue001(), queue02(), queue003(), queue_image(), queue_pdf());
container.setConcurrentConsumers(1);
container.setMaxConcurrentConsumers(5);
container.setDefaultRequeueRejected(false);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setExposeListenerChannel(true);
container.setConsumerTagStrategy(queue -> queue + "_" + UUID.randomUUID().toString());
// container.setMessageListener(new ChannelAwareMessageListener() {
// @Override
// public void onMessage(Message message, Channel channel) throws Exception {
// String msg = new String(message.getBody());
// System.err.println("--------消费者:" + msg);
// }
// });
/**
// 1、适配器
MessageListenerAdapter adapter = new MessageListenerAdapter(new MessageDelegate());
adapter.setDefaultListenerMethod("consumeMessage");
// 消息转换器
adapter.setMessageConverter(new TextMessageConverter());
container.setMessageListener(adapter);
**/
/**
* 2、适配器方式:我们的队列名称和方法名称也可以进行一一匹配
*/
MessageListenerAdapter adapter = new MessageListenerAdapter(new MessageDelegate());
adapter.setMessageConverter(new TextMessageConverter());
Map<String, String> queueOrTagToMethodName = new HashMap<>();
queueOrTagToMethodName.put("queue001", "method1");
queueOrTagToMethodName.put("queue002", "method2");
adapter.setQueueOrTagToMethodName(queueOrTagToMethodName);
container.setMessageListener(adapter);
return container;
}
适配器实现
package club.yunqiang.rabbitmqspring;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
/**
* @author 张云强
* @date 2019/12/11
*/
public class MessageDelegate {
// public void handleMessage(byte[] messageBody){
// System.err.println("默认方法,消息内容:" + new String(messageBody));
// }
// public void consumeMessage(byte[] messageBody){
// System.err.println("字节数组方法,消息内容:" + new String(messageBody));
// }
public void consumeMessage(String messageBody){
System.err.println("字符串方法,消息内容:" + messageBody);
}
}
注意:本文归作者所有,未经作者允许,不得转载