RabbitMQ(三)SpringBoot整合RabbitMQ

RabbitMQ

注意:在整合之前可以先看一下RabbitMQ的基本概念
https://blog.csdn.net/weixin_44259134/article/details/102939723
https://blog.csdn.net/weixin_44259134/article/details/102947621

                                                   在这里插入图片描述

SpringBoot整合RabbitMQ简单实现步骤

1.添加maven依赖,修改pom.xml。这个spring-boot-starter-amqp里面的amqp指的是高级消息队列协议,而rabbitmq就是amqp协议的一种实现中间件。

<!-- 添加springboot对amqp的支持 -->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.application.properties修改配置,如果本地没有rabbitmq需要自行安装

#rabbitmq链接地址
spring.rabbitmq.host=ip
spring.rabbitmq.port=端口
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=my_vhost
#开启消费者重试
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数(重试5次还不行则会把消息删掉,默认是不限次数的,次数建议控制在10次以内)
spring.rabbitmq.listener.simple.retry.max-attempts=5
#重试间隔时间
spring.rabbitmq.listener.simple.retry.initial-interval=3000

3.创建配置TopicRabbitConfig:主要是创建交换机,创建对列,创建RoutingKey,通过routingKey把队列与交换机绑定起来

@Configuration
public class TopicRabbitConfig {

/**
* @description: 创建配置队列,用来创建其他队列
* 命名规则:A_TO_B_QUEUE A_TO_B_EXCHANGE (A,B分别为系统A和B)
*/
  @Value("COLLECT_EXCHANGE_LOCAL")
  private String EXCHANGE_NAME; // 交换机名称

  @Value("COLLECT_QUEUE_NAME")
  private String QUEUE_NAME; // 队列名称

  @Value("COLLECT_ROUTING_KEY")
  private String ROUTING_KEY; // RoutingKey

  /** 创建交换机 */
  @Bean
  public DirectExchange directExchange() {
    return new DirectExchange(EXCHANGE_NAME);
  }

  /** 创建队列 */
  @Bean
  public Queue logCollectQueue() {
    return new Queue(QUEUE_NAME);
  }

  /** 通过routingKey把队列与交换机绑定起来 */
  @Bean
  public Binding binding(DirectExchange exchange, Queue queue) {
    return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
  }
}

4.创建生产者HelloSender,就是投递消息的一方
生产者创建消息,然后发布到 RabbitMQ 中。消息一般可以包含 2 个部分:消息体和标签 CLabel) 。消息体也可以称之为
payload ,在实际应用中,消 息体 一般是一个带有业务逻辑结构 的数据,比如一个 JSON 字符串。当然可以进一步对这个
消息体进行序列化操作。消息的标签用来表述这条消息,比如一个交换器的名称和一个路由键生产者把消息交由 RabbitMQ ,
RabbitMQ 之后会根据标签把消息发送给感兴趣 的消费者(Consumer)。

@Component
public class HelloSender {
  private static Logger logger = Logger.getLogger(HelloSender.class);
  
  @Autowired
  private AmqpTemplate template;

  @Value("COLLECT_EXCHANGE_LOCAL")
  private String EXCHANGE_NAME; //交换机名字

  @Value("COLLECT_ROUTING_KEY")
  private String ROUTING_KEY; // RoutingKey

  @Value("COLLECT_QUEUE_NAME")
  private String QUEUE_NAME; // 队列名称

  //创建生产者
  public void send() {
      /*//指定交换机和RoutingKey创建生产者
      template.convertAndSend(EXCHANGE_NAME, ROUTING_KEY, "hello,rabbit~");*/

      logger.info("创建生产者");
      //根据队列名创建生产者
      template.convertAndSend(QUEUE_NAME,"hello,rabbitQueueName");
  }
}

5.创建消费者HelloReceive ,就是接收消息的 一方
消费者连接到 RabbitMQ 服务器,并订阅到队列上 。 当消费者消费一条消息时 , 只是消费
消息的消息体 C payload ) 。 在消息路由的过程中 , 消息的标签会丢弃 , 存入到队列中的消息只
有消息体,消费者也只会消费到消息体 , 也就不知道消息的生产者是谁,当然消费者也不需要
知道 。

@Component
public class HelloReceive {
    private static Logger logger = Logger.getLogger(HelloReceive.class);

    //创建消费者,由COLLECT_QUEUE_NAME监听队列
    @RabbitListener(queues="COLLECT_QUEUE_NAME")//监听器监听指定的Queue
    public void process(String str) {
        logger.info("创建消费者,Receive:"+str);
    }
}

6.最后创建测试类直接调用生产者

@SpringBootTest(classes= ConsumerServiceApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class TestRabbitMQ {
  private static Logger logger = Logger.getLogger(TestRabbitMQ.class);
  
  @Autowired
  private HelloSender helloSender;

  @Autowired
  private HelloSender2 helloSender2;

  @Test
  public void testRabbit() {
      logger.info("start");
      helloSender.send();
      logger.info("end");
  }
}

运行测试方法,成功!
在这里插入图片描述                                                   在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值