目录
Spring Cloud Stream
原理图
工作原理
MQ
MQ原理图
RabbitMQ概述
常见消息模型
Spring AMQP
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界面 =================
================= 首页信息介绍 =================
Demo练习
导入依赖
生产者
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<PremisesInfoEntity> queryList(Map<String, Object> 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);
}
}
效果
==========================交换机注册情况==========================
==========================消息消费情况==========================