微服务RabbitMQ进阶篇

目录

SpringAMQP

什么是AMQP

SpringAMQP如何发送消息

SpringAMQP如何接收消息?

spring amqp(重点)

介绍

1.简单模式

2.工作队列模式

3.发布订阅模式​

4.路由模式

5.通配符模式

消息转化器

RabbitMq集群搭建

搭建流程


SpringAMQP

什么是AMQP

应用间消息通信的一种协议

SpringAMQP如何发送消息

1.引入amqp的starter依赖

spring-boot-starter-amqp

2.配置RabbitMQ地址

spring:
  rabbitmq:
    host: 192.168.214.130   #可变
    port: 5672
    virtual-host: /
    username: guest
    password: guest

3.注入RabbitTemplate,利用RabbitTemplate的convertAndSend方法

SpringAMQP如何接收消息?

  1. 引入amqp的starter依赖
  2. 配置RabbitMQ地址
  3. 定义类,添加@Component注解
  4. 类中声明方法,添加@RabbitListener注解,方法参数就时消息
  5. 注意:消息一旦消费就会从队列删除,RabbitMQ没有消息回溯功能

spring amqp(重点)

介绍

amqp 规定了p和MQ如何通信,c和MQ通信

spring amqp基于amqp协议定义的一套api规范。JDBC

spring-rabbit对 spring amqp规范实现。数据库驱动

1.简单模式

搭建项目

创建队列

生产者服务

1.引入依赖 spring amqp的starter

2.配置文件配置rabbitmq地址

3.rabbitTemplate.covertAndSend(交换机,routingKey,消息数据);

4.rabbitTemplate.covertAndSend(routingKey,消息数据);

消费者服务

1.引入依赖 spring amqp的starter

2.配置文件配置rabbitmq地址

3.编写消息监听器,监听队列获取消息

类-->@Component

方法:public void xxx()

方法加@RabbitListener(queues="队列名称")

方法:public void xxx(String message)

2.工作队列模式

再启动一个消费者就可以演示出效果

3.发布订阅模式

创建交换机

创建队列

绑定交换机和队列

4.路由模式

创建交换机

创建队列

绑定交换机和队列

指定具体的routingKey

发消息

rabbitTemplate.covertAndSend(交换机,routingKey,消息数据)

获取消息

5.通配符模式

创建交换机

创建队列

绑定交换机和队列

指定具体的routingKey

发消息

rabbitTemplate.covertAndSend(交换机,routingKey,消息数据)

获取消息

消息转化器

如何发送对象类型消息。

spring-amqp默认使用的消息转化器,默认采用jdk的序列化,将对象转化为字节数组。要求类实现Serializable

jdk的序列化,将对象序列化的结果看不懂

采用Jackson的序列化

生产者和消费者都要引入依赖

生产者和消费者都要声明@Bean Jackson2JsonMessageConverter

注意:配置类扫描

RabbitMq集群搭建

搭建流程

1.规划3个rabbitmq容器

mq1 mq2 mq3(三个主机名称,主机名用来代替ip)

  • 容器是有自己独立的网络系统和文件系统。容器中可以通过主机名称或者ip进行互联。
  • 管理控制台端口8081 8082 8083
  • 通信端口8071 8072 8073

2.获取erlang语言的cookie值

  • rabbitmq是基于erlang语言开发的,要想搭建集群erlang语言的cookie值必须一样。
  • 进入之前我们安装的mq容器中查看文件
  • docker exec -it mq  bash
  • cat /var/lib/rabbitmq/.erlang.cookie
  • DDFYTIUXFCJITRBQWBPA

3.创建一个记录cookie的文件.erlang.cookie,所有容器必须一样

  • 所有的mq挂载同一个文件
  • 文件内容,之前查看的cookie内容
  • 授权:chmod 600 .erlang.cookie

4.创建一个集群配置文件rabbitmq.conf,该集群配置文件,所有的容器必须是一样的

  1. 通过目录挂载的方式保证一样
  2. 所有的mq挂载同一个文件
  3. 文件内容
loopback_users.guest = false
listeners.tcp.default = 5672
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@mq1
cluster_formation.classic_config.nodes.2 = rabbit@mq2
cluster_formation.classic_config.nodes.3 = rabbit@mq3

5.创建一个docker网络,保证三个mq在一个网络中

docker network create mq-net

6.创建三个mq节点,保证挂载同一个集群文件和cookie文件

docker run -d --net mq-net \
-v /tmp/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /tmp/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=itcast \
-e RABBITMQ_DEFAULT_PASS=123 \
--name mq1 \
--hostname mq1 \
-p 8071:5672 \
-p 8081:15672 \
rabbitmq:3.8-management
docker run -d --net mq-net \
-v /tmp/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /tmp/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=itcast \
-e RABBITMQ_DEFAULT_PASS=123 \
--name mq2 \
--hostname mq2 \
-p  8072:5672 \
-p 8082:15672 \
rabbitmq:3.8-management
docker run -d --net mq-net \
-v /tmp/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /tmp/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=itcast \
-e RABBITMQ_DEFAULT_PASS=123 \
--name mq3 \
--hostname mq3 \
-p 8073:5672 \
-p 8083:15672 \
rabbitmq:3.8-management
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值