【MQ】讲解

一、同步通信和异步通信

同步调用的问题:

耦合度高: 每次加入新的需求,都要修改原来的代码
性能下降: 调用者需要等待服务功能提供响应,如果调用链过长则响应时间等于每次调用时间之和。
资源浪费: 调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源
级联失败: 如果服务功能提供者出现问题,所有调用方法都会跟着出问题

异步通信优势:

解除耦合,提升性能,故障隔离,流量削峰

异步通信的缺点:

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的工具,是消息发布者和交换机之间的连接通道,也是消息消费者连接队列的通道。

基本结构:

  1. 消息的发布者(publisher)将消息投递到交换机(exchange)
  2. 交换机(exchange)将消息转发到与之绑定的队列(queue)
  3. 消息消费者(consumer)监听队列(queue),获取队列(queue)的消息
  4. 将不同的队列(queue)和交换机(exchange)划分成一组,称为虚拟主机(virtualHost)

发送消息

@Test
    public void testSendMessage() throws IOException, TimeoutException {
   
   
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
        factory.setHost<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值