一、同步通信和异步通信
同步调用的问题:
耦合度高: 每次加入新的需求,都要修改原来的代码
性能下降: 调用者需要等待服务功能提供响应,如果调用链过长则响应时间等于每次调用时间之和。
资源浪费: 调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源
级联失败: 如果服务功能提供者出现问题,所有调用方法都会跟着出问题
异步通信优势:
解除耦合,提升性能,故障隔离,流量削峰
异步通信的缺点:
1、依赖与Broker的可靠性、安全性、性能提升能力
2、架构复杂了,业务没有明显的流程线,不好追踪管理
二、MQ
常用的mq:rabbitmq、rocketmq、kafka
追求可用性(当需要处理数据时,资源处于可用状态的程度):Kafka、RocketMQ、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力(十万级别的):RocketMQ、Kafka
追求消息延迟:RabbitMQ、Kafka
docker安装mq
拉取镜像docker pull rabbitmq:3.8-management
运行mq容器
docker run \
#设置环境变量 用户名是 root
-e RABBITMQ_DEFAULT_USER=root \
#设置环境变量 密码是123321
-e RABBITMQ_DEFAULT_PASS=123321 \
#挂载数据卷
-v mq-plugins:/plugins \
#mq名字
--name mq \
#主机名集群必须配置
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
-d \
# 镜像名称
rabbitmq:3.8-management
----
docker run \
-e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=123321 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3.8-management
访问http://192.168.80.128:1567/
RabbitMQ中的一些角色:
- publisher:生产者(发布者)
- consumer:消费者
- exchange:交换机,负责消息路由
- queue:队列,存储消息
- virtualHost:虚拟机主机,隔离不同租户的exchange、queue、消息的隔离
- channel:表示通道,操作MQ的工具,是消息发布者和交换机之间的连接通道,也是消息消费者连接队列的通道。
基本结构:
- 消息的发布者(publisher)将消息投递到交换机(exchange)
- 交换机(exchange)将消息转发到与之绑定的队列(queue)
- 消息消费者(consumer)监听队列(queue),获取队列(queue)的消息
- 将不同的队列(queue)和交换机(exchange)划分成一组,称为虚拟主机(virtualHost)
发送消息
@Test
public void testSendMessage() throws IOException, TimeoutException {
// 1.建立连接
ConnectionFactory factory = new ConnectionFactory();
// 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
factory.setHost<

最低0.47元/天 解锁文章
6115

被折叠的 条评论
为什么被折叠?



