消息队列以及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账号的绑定(因为是在这个账号下创建的)

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

相关推荐
m0_73691910几秒前
C++中的类型标签分发
开发语言·c++·算法
天桥下的卖艺者4 分钟前
使用R语言编写一个生成金字塔图形的函数
开发语言·数据库·r语言
爬山算法4 分钟前
Hibernate(78)如何在GraphQL服务中使用Hibernate?
java·hibernate·graphql
2301_790300967 分钟前
C++与微服务架构
开发语言·c++·算法
独断万古他化9 分钟前
【Spring 核心:AOP】基础到深入:思想、实现方式、切点表达式与自定义注解全梳理
java·spring·spring aop·aop·切面编程
一切尽在,你来11 分钟前
C++多线程教程-1.1.4 并发编程的风险(竞态条件、死锁、数据竞争、资源争用)
开发语言·c++
艳阳天_.13 分钟前
web 分录科目实现辅助账
开发语言·前端·javascript
梵刹古音15 分钟前
【C语言】 循环结构
c语言·开发语言·算法
消失的旧时光-194318 分钟前
C++ 函数参数传递方式总结:什么时候用值传递、引用、const 引用?
开发语言·c++
2601_9498683619 分钟前
Flutter for OpenHarmony 剧本杀组队App实战04:发起组队表单实现
开发语言·javascript·flutter