rabbitMq实战使用

Posted cjh-notes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitMq实战使用相关的知识,希望对你有一定的参考价值。

只做下工作记录,比较重要的几个属性:

concurrency:一个生产者可以同时由多少个消费者消费,这个一般根据你的机器性能来进行配置

prefetch:允许为每个consumer指定最大的unacked messages数目。要是对实时性要求很高的话,prefetch应该设置成1,concurrency的值调高点

 

队列中Ready状态和Unacknowledged状态的消息数,分别指的是等待投递给消费者的消息数和已经投递给消费者但是未收到ack信号的消息数。

 

注意配置超时重连机制,防止死机

spring.rabbitmq.listener.simple.retry.max-attempts=5
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.initial-interval=5000
spring.rabbitmq.listener.simple.default-requeue-rejected=false
spring.rabbitmq.listener.simple.prefetch=1

Springboot中消费简单实现

@RabbitListener(concurrency = "12",bindings = {@QueueBinding(value = @Queue(value = YOUR_QUEUE), exchange = @Exchange(value = YOUR_EXCHANGE,type = "fanout"))})
    public void process(Message message, com.rabbitmq.client.Channel channel) {

        Long deliveryTag = null;
        String data = null;
        try {

            deliveryTag = message.getMessageProperties().getDeliveryTag();
            data = new String(message.getBody(), "UTF-8");

            //业务处理

        } catch (Exception e) {
            logger.warn("=====消息处理异常");
            logger.warn("MQ异常 {} , {} , {}" , e.getMessage(),e.getCause(),data);
        }finally {

            try {
                channel.basicAck(deliveryTag, false); // 确认消息成功消费
            } catch (IOException e) {
                logger.warn("======应答出错,请检查");
            }
            logger.warn("======消息结束");
        }
    }

 

 

 转载请注明博客出处:http://www.cnblogs.com/cjh-notes/

 

以上是关于rabbitMq实战使用的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ .NET Client 实战实验

RabbitMq一文彻底弄懂RabbitMq的四种交换机原理及springboot实战应用

荧客技荐RabbitMQ 实战之 Spring Boot 整合 RabbitMQ

RabbitMQ-从基础到实战— Hello RabbitMQ

云原生之Docker实战使用Docker部署Rabbitmq集群

Spring Boot 揭秘与实战 消息队列篇 - RabbitMQ