ToB企服应用市场:ToB评测及商务社交产业平台

标题: springboot 整合 rabbitMQ(1) [打印本页]

作者: 金歌    时间: 2024-11-14 09:40
标题: springboot 整合 rabbitMQ(1)
目次
一、MQ概述
二、MQ的优势和劣势
 三、常见的MQ产品
RabbitMQ使用步调
第一步:确保rabbitmq启动并且可以访问15672
第二步:导入依靠
第三步:设置
auto自动确认
manual手工确认(推荐使用!可以防止消息丢失)
第四步:编写生产者和消费者


一、MQ概述

  MQ 全称是Message Queue(消息队列),是在消息传输过程中保存消息的容器,多用于分布式         系统之间进行通讯。
二、MQ的优势和劣势

   优势

  劣势

 三、常见的MQ产品


RabbitMQ使用步调

第一步:确保rabbitmq启动并且可以访问15672


第二步:导入依靠

  1.         <!-- rabbitmq -->
  2.         <dependency>
  3.             <groupId>org.springframework.boot</groupId>
  4.             <artifactId>spring-boot-starter-amqp</artifactId>
  5.         </dependency>
复制代码
第三步:设置

  
  1. rabbitmq:
  2.   host: ip
  3.   port: 5672
  4.   username: guest
  5.   password: guest
  6.   virtual-host: /
  7.   listener:
  8.     simple:
  9.       prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条
  10.       acknowledge-mode: manual # 设置消费端手动ack确认  不写默认为自动确认(auto)
  11.       retry:
  12.         enabled: true # 是否支持重试
  13.   publisher-confirm-type: correlated  #确认消息已发送到交换机(Exchange)
  14.   publisher-returns: true  #确认消息已发送到队列(Queue)     
复制代码
auto自动确认

manual手工确认(推荐使用!可以防止消息丢失)

无论有没有异常,尺度只有是否自动调用basicAck()、basicNack()等方法,没有调用则一直阻塞.
因此有异常时,(有重试就重试),抛出异常后,没有调用时,照旧会一直阻塞。纵然是auto模式的那两个特殊的异常,在manual中都是一样的,不会有特殊处置惩罚.

官网对应模式介绍:RabbitMQ Tutorials | RabbitMQ

第四步:编写生产者和消费者

        这里写一个登录成功发送消息给登录人的业务(普通队列模式) 

生产者
        

      

        发邮件是发给一个人,以是这里只必要传一个队列名和登录人对象。(发送给多个队列时需            要用到交换机)
        

消费者:
  1. //@Header从消息头中提取消息的递送标签,标签是唯一的,对应唯一的消息
  2. @RabbitListener(queuesToDeclare = @Queue("login_queue"))
  3. public void test01(User getUser, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long         
  4.                    deliveryTag)
  5. {
  6.     try {
  7.              发送邮件的代码……
  8.             
  9.             //手动确认消息
  10.             channel.basicAck(deliveryTag,true);
  11.         } catch (MessagingException e) {
  12.             throw new RuntimeException(e);
  13.         } catch (IOException e) {
  14.             throw new RuntimeException(e);
  15.         }
  16. }
复制代码
 如果设置了手工消费,肯定要消费完后手动确认消息,不然就会重复接收该消息,导致后面的消息担当不到!
         

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4