消息队列以及RabbitMQ的使用

目录

一、同步与异步

二、消息队列技术选型

RabbitMQ:

RabbitMQ的使用:

数据隔离:


一、同步与异步

微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要等待 服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态,因此我们称这种调用方式为同步调用 ,也可以叫同步通讯。而异步调用就是实时性比较差,其他服务可能无法立即受到处理该请求,但是一个微服务却可以同时向多个服务发起请求;所以,如果我们的业务需要实时得到服务提供方的响应,则应该选择同步通讯(同步调用)。而如果我们追求更高的效率,并且不需要实时响应,则应该选择异步通讯(异步调用)。

这样不利于我们拓展业务,倘若我们希望添加一个通知客户成功支付的功能,则需要新加代码,也就是说每次有新的需求,现有支付逻辑都要跟着变化,代码经常变动,不符合开闭原则,拓展性不好。其次,我们采用了同步调用,服务一多,各个服务相互等待就会出现性能问题,而我们又不见简单地做限流、熔断等处理,那样会导致更严重的数据不一致问题,所以这里就需要异步调用来解决该问题。

二、消息队列技术选型

消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.

据统计,目前国内消息队列使用最多的还是RabbitMQ,再加上其各方面都比较均衡,稳定性也好,因此我们选择RabbitMQ来学习。

RabbitMQ:

接下来我们就来安装RabbitMQ:

1.将RabbitMQ的tar包拉到虚拟机/root目录下并使用以下指令加载tar包:

bash 复制代码
docker load -i mq.tar

2.执行以下指令创建容器:

bash 复制代码
docker run \
 -e RABBITMQ_DEFAULT_USER=******* \ #这里是自己设置的账号
 -e RABBITMQ_DEFAULT_PASS=****** \ #这里是自己设置的密码
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network hm-net\
 -d \
 rabbitmq:3.8-management

安装完成后,我们访问 http://192.168.150.101:15672即可看到管理控制台。首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。

其中包含几个概念:

  • publisher:生产者,也就是发送消息的一方

  • consumer:消费者,也就是消费消息的一方

  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理

  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。

  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

RabbitMQ的使用:

1.首先需要创建队列:

2.接着绑定交换机与队列,也就是创建路由:

3.最后在交换机当中发送信息:

我们回到Queues页面,可以发现hello.queue中已经有一条消息了:

点击队列名称,进入详情页,查看队列详情,这次我们点击get message:

数据隔离:

点击Admin选项卡,首先会看到RabbitMQ控制台的用户管理界面:

这里的用户都是RabbitMQ的管理或运维人员。目前只有安装RabbitMQ时添加的itheima这个用户。仔细观察用户表格中的字段,如下:

  • Nameitheima,也就是用户名

  • Tagsadministrator,说明itheima用户是超级管理员,拥有所有权限

  • Can access virtual host/,可以访问的virtual host,这里的/是默认的virtual host

对于小型企业而言,出于成本考虑,我们通常只会搭建一套MQ集群,公司内的多个不同项目同时使用。这个时候为了避免互相干扰, 我们会利用virtual host的隔离特性,将不同项目隔离。一般会做两件事情:

  • 给每个项目创建独立的运维账号,将管理权限分离。

  • 给每个项目创建不同的virtual host,将每个项目的数据隔离。

那么接下里,我们给黑马商城创建一个新的用户以及虚拟主机:

1.创建我们项目的用户,并设置密码以及超级管理员权限,添加好后退出登录并以hmall账号登录:

可以看到我们创建好的用户以及没有虚拟主机的状态,所以我们接下来要创建虚拟主机

2.根据图示顺序即可创建虚拟主机并且完成与hmall账号的绑定(因为是在这个账号下创建的)

这样就创建好了我们项目专属的虚拟主机环境啦

相关推荐
我星期八休息21 分钟前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
热心网友俣先生30 分钟前
2026年第二十三届五一数学建模竞赛C题超详细解题思路+各问题可用模型推荐+部分模型结果展示
c语言·开发语言·数学建模
01漫游者34 分钟前
JavaScript函数与对象增强知识
开发语言·javascript·ecmascript
GottdesKrieges35 分钟前
OceanBase恢复常见问题
java·数据库·oceanbase
IGAn CTOU36 分钟前
Java高级开发进阶教程之系列
java·开发语言
leo825...39 分钟前
Claude Code Skills 清单(本地)
java·python·ai编程
csbysj202042 分钟前
SQL NULL 函数详解
开发语言
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
NGSI vimp1 小时前
Java进阶——如何查看Java字节码
java·开发语言
We་ct2 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域