【02根本】- RabbitMQ根本
2- RabbitMQ2-1 介绍和安装
RabbitMQ 的团体架构以及焦点概念
[*]publisher:消息发送者
[*]cunsumer:消息消费者
[*]queue:队列
[*]exchange:互换机,负责路由消息
[*]virtual-host :捏造主机,起到数据隔离的作用;一个 MQ 中可以创建多个 virtual-host
数据流转的模子:①生产者将数据发送给互换机 ——> ②互换机将消息路由给队列 ——> ③消费者监听队列拿到消息
https://img-blog.csdnimg.cn/img_convert/523d9e4f6c0961a9fb6098d6c505503d.png
安装
[*]上传镜像文件 mq.tar 到 Linux 系统中
[*]执行下令
docker load -i mq.tar
[*]复制以下代码执行
[*]其中 15672 ,是控制台端口
[*]其中 5672 ,是收发消息的端口
docker run \
-e RABBITMQ_DEFAULT_USER=itheima \
-e RABBITMQ_DEFAULT_PASS=123321 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
--network hmall \
-d \
rabbitmq:3.8-management
2-2 RabbitMQ 快速入门
需求
[*]在 rabbitmq 的控制台完成下列操作:
[*]新建队列 hello.queue1 和 hello.queue2
[*]向默认的 amp.fanout 互换机发送一条消息
[*]查看消息是否到达 hello.queue1 和 hello.queue2
实现
[*]必要创建队列,同时在互换机中必要绑定队列才能实现消息的路由。
总结规律
①如果互换机和队列没有绑定能否收到消息?
[*]互换机:是负责路由和转发消息的。互换机通过绑定队列,之后可以将消息转发到队列中。
②如果绑定了所有队列是不是所有队列都可以收到消息?
[*]是的,如果一个互换机绑定了多个队列,那类似于广播的效果所有队列都能收到消息。
2-3 RabbitMQ 数据隔离
[*]在 RabbitMQ 中有捏造主机的概念,对于互换机和队列而言都有二者自己的捏造主机。
需求
[*]在 RabbitMQ 的控制台下完成下列操作
[*]新建一个用户 hmall
[*]为 hmall 用户创建一个 vitual host
[*]测试不同的 vitual host 之间的数据隔离征象
实现
[*]① 起首在 Admin ——> Users 中创建用户
[*]② 在 Admin ——> Users 中创建捏造主机
总结
[*]各个捏造主机下都是相互隔离的。
3- Java客户端
3-1 快速入门
AMQP
https://img-blog.csdnimg.cn/img_convert/8fab774fe6ec651fa49b9a1191b778b1.png
什么是 AMQP?
[*]Advanced Message Queuing Protocol,是一种高级的消息队列协议,是用于在应用步伐之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。
Spring AMQP
[*]Spring AMQP是基于 AMQP 协议界说的一套 API 规范,提供了模板来发送和吸收消息。包罗两部分,其中Spring AMQP 是根本抽象,spring-rabbit 是底层的默认实现
快速入门
需求
[*]利用控制台创建队列 simple.queue
[*]在 publisher 服务中,利用 SpringAMQP 直接向 simple.queue 发送消息
[*]在 consumer 服务中,利用 SpringAMQP 编写消费者监听 simple.queue 队列
https://img-blog.csdnimg.cn/img_convert/06611c8c91b730a6254ce8012ea3bd6d.png
实现
[*]① 引入 spring-amqp依靠,在父工程中引入 spring-amqp 依靠,这样 publisher 和 consumer 服务都可以使用
<!-- AMQP依赖,包含RabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
[*]② 在每个微服务中引入 MQ 服务端信息,这样微服务才能毗连到 RabbitMQ
https://img-blog.csdnimg.cn/img_convert/76a3e7a480ef51ec59335815c59cde0e.png
[*]③ 发送消息: SpringAMQP 提供了 RabbitTemplate 工具类,方便我们发送消息,发送消息的代码如下
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSimpleQueue() {
// 队列名称
String queueName = "simple.queue";
// 消息
String message = "hello, spring amqp!";
// 发送消息
rabbitTemplate.convertAndSend(queueName, message);
}
[*]④ 吸收消息:
[*]SpringAMQP 提供声明式的消息监听,我们只必要通过 注解 在方法上声明要监听的队列名称,未来 SpringAMQP 就会把消息传递给当前方法。
@Slf4j
@Component
public class SpringRabbitListener {
@RabbitListener(queues = "simple.queue")
public void listenSimpleQueueMessage(String msg) throws InterruptedException {
log.info("spring 消息接收到消息: [" + msg + "]");
if (true) {
throw new MessageConversionException("故意的");
}
log.info("消息处理完毕");
}
}
页:
[1]