第四章 (8-9)消息监听适配器 MessageListenerAdapter

1年前 ⋅ 869 阅读

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);
    }

}

全部评论: 0

    我有话说: