Spring Cloud Stream 整合 RabbitMQ

目录

Spring Cloud Stream

原理图

工作原理

MQ

MQ原理图

RabbitMQ概述

常见消息模型

Spring AMQP

Docker方式下载、运行RabbitMQ

Demo练习

导入依赖

生产者

消费者

效果


Spring Cloud Stream

Spring Cloud Stream 整合 RabbitMQ_第1张图片

原理图

Spring Cloud Stream 整合 RabbitMQ_第2张图片

 Spring Cloud Stream 整合 RabbitMQ_第3张图片

工作原理

Spring Cloud Stream 整合 RabbitMQ_第4张图片

 Spring Cloud Stream 整合 RabbitMQ_第5张图片

MQ

Spring Cloud Stream 整合 RabbitMQ_第6张图片

MQ原理图

Spring Cloud Stream 整合 RabbitMQ_第7张图片

RabbitMQ概述

Spring Cloud Stream 整合 RabbitMQ_第8张图片

常见消息模型

Spring Cloud Stream 整合 RabbitMQ_第9张图片

Spring AMQP

Spring Cloud Stream 整合 RabbitMQ_第10张图片

 

Docker方式下载、运行RabbitMQ

# 拉取镜像
docker pull rabbitmq:3-management

# 查看本地镜像
docker images

# 运行rabbitmq
docker run \
-e RABBITME_DEFAULT_USER=itcast \      #账号
-e RABBITMQ_DEFAULT_PASS=123321 \      #密码
--name rabbitmq \                      #容器名
--hostname mq1 \                       #主机名
-p 15672:15672 \                       #ui服务端口
-p 5672:5672 \                         #信息交互端口
-d \                                   #后台方式运行
rabbitmq:3-management                  #镜像名

================= 运行后访问UI界面 =================

Spring Cloud Stream 整合 RabbitMQ_第11张图片

================= 首页信息介绍 =================

Spring Cloud Stream 整合 RabbitMQ_第12张图片

 

Demo练习

导入依赖

Spring Cloud Stream 整合 RabbitMQ_第13张图片

生产者

application.yml配置文件

  # rabbitmq连接信息
  rabbitmq:
    host: 192.168.241.121 # 主机名
    port: 5672 # 端口
    virtual-host: / # 虚拟主机
    username: guest  # 用户名
    password: guest  # 密码

自定义消息生产者绑点

/**
 * @Description:  自定义消息生产信道或生产者消息绑点
 * @Date: 2022/5/15 19:10
 */
public interface OutputMessageBinding {
    
    String OUTPUT = "message-center";


    /**
     * 返回消息信道
     */
    @Output(OUTPUT)
    MessageChannel output();

}

 将通道和交换机建立连接,并向交换机发送消息

@Service
@EnableBinding(OutputMessageBinding.class) //使自定义通道和交换机建立连接
public class PremisesInfoServiceImple implements PremiseInfoService {

    @Resource
    private OutputMessageBinding outputMessageBinding;

    @Override
    public List queryList(Map map) {

        OperationLog log = new OperationLog().setId(1L).setMethodName("测试数据");
        //调用output方法获得消息信道,调用send向交换机发送消息
        outputMessageBinding.output().send(MessageBuilder.withPayload(log).build());
    }
}

消费者

配置文件同上

编写InputMessageBinding.java自定义消费者绑点

/**
 * @Description:  自定义消费者信道或消息绑点
 * @Date: 2022/5/15 19:10
 */
public interface InputMessageBinding {

    String INPUT = "message-center";
    
    /**
     * 返回订阅信道
     */
    @Input(INPUT)
    SubscribableChannel input();

}

编写MqReceiver.java 消费消息 

@Slf4j
@EnableBinding(InputMessageBinding.class) //将自定义绑点和交换机建立连接
public class MqReceiver {

    @StreamListener(InputMessageBinding.INPUT)
    public void handle(String value){
        log.info("[消息] 接收到发送消息MQ: {}", value);
        OperationLog log = JSON.parseObject(value, OperationLog.class);
        System.out.println(log);
    }
}

效果

==========================交换机注册情况==========================

Spring Cloud Stream 整合 RabbitMQ_第14张图片

==========================消息消费情况==========================

你可能感兴趣的:(软件安装,架构设计,spring,cloud,rabbitmq,中间件,docker)