MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

SpringBoot 整合 RabbitMQ 实践

2024-12-11 13:30 huorong 精选文章 5 ℃ 0 评论

作者:Cott

来源:www.cnblogs.com/cott/p/12402423.html

前文总结了Dubbo与SpringBoot的整合,本文基于这套框架,引入RabbitMQ消息队列。

1.在linux环境使用docker安装RabbitMQ

//拉取镜像
docker pull rabbitmq:management
//启动镜像
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

安装成功后登陆控制台


2.生产者

pom.xml中引入RabbitMQ依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
  <version>1.3.5.RELEASE</version>
</dependency>

application.yml

配置RabbitMQ服务端连接,和交换机名称

spring:
  rabbitmq:
    port: 5672
    username: admin
    password: admin
    host: 192.168.200.128
    virtual-host: /

order:
  fanout:
    exchange: order.fanout.exchange

Producer.java

生产者向MQ发送消息


UserServiceImpl.java

在用户接口的实现类中,调用生产者的方法

3.消费者

pom.xml中引入RabbitMQ依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
  <version>1.3.5.RELEASE</version>
</dependency>

配置RabbitMQ服务端信息,和交换机以及队列名称

application.yml

spring:
  rabbitmq:
    port: 5672
    username: admin
    password: admin
    host: 192.168.200.128
    virtual-host: /

order:
  fanout:
    exchange: order.fanout.exchange
    queue: order.fanout.queue

@RabbitListener注解,绑定队列,交换机,以及选择交换模式FANOUT

  • @RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用
  • @RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型

Consumer.java(消费者)

package com.cott.gmail.bootorderserviceconsumer.service.impl;

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${order.fanout.queue}", autoDelete = "true"), exchange =
@Exchange(value = "${order.fanout.exchange}", type = ExchangeTypes.FANOUT)))
public class Consumer {

    @RabbitHandler
    public void processMessage(String msg) {
        System.out.format("Receiving Message: -----[%s]----- \n.", msg);
    }
}

消费者中有调用生产者getAddress()的方法,生产者向MQ中发送一条消息,同时消费者监听MQ,消费消息。

OrderServiceImpl.java


4.验证

先后启动生产者和消费者,在浏览器发起请求

消费者控制台输出

同时在RabbitMQ控制台查看监控日志

Tags:rabbitmq management

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言