首页 > 其他 > 详细

4.9 RabbitMQ-开源消息代理软件

时间:2020-12-25 17:48:15      阅读:39      评论:0      收藏:0      [点我收藏+]

一、RabbitMQ介绍

1.1 引言

如果客户端要保存客户的数据,就需要通过客户模块去操作。但是我们想保存后在客户模块调用搜索模块,又想调用缓存模块缓存起来,还想调用其它模块。其实我们的核心业务就是用客户模块去存数据,其它的也是必做的,但是不是我们的核心需求。这时候会有什么问题?

  1. 模块之间的耦合度,导致一个模块宕机后,全部功能都不能用了。比如缓存模块失败,由于现在是串行的,那么客户模块就失败了。
  2. 同步通讯的成本问题。时间太长了。

技术分享图片

 这就需要我们的RabbitMQ来帮我们处理了。

 1.2 RabbitMQ的介绍

市面上比较火爆的几款MQ:

ActiveMQ(比较古老,比较早)、RocketMQ、Kafka(常用于大数据中)、RabbitMQ。

  1. 语言的支持:ActiveMQ,RocketMQ只支持Java语言,Kafka可以支持多们语言(最好用java,因为Kafka本身是用什么ktelinna什么的,忘记了),RabbitMQ支持多种语言。
  2. 效率方面:ActiveMQ,RocketMQ,Kafka效率都是毫秒级别,但是我们的RabbitMQ更加优秀,是微妙级别的。
  3. 消息丢失,消息重复问题:RabbitMQ针对消息的持久化,和重复问题都有比较成熟的解决方案。(其实其它MQ也有)
  4. 学习成本:RabbitMQ非常简单,简单到令人发指。

RabbitMQ是由Rabbit公司去研发和维护的,最终在Pivotal。

RabbitMQ严格的遵循AMQP协议,高级消息队列协议,帮助我们在进程之间传递异步消息。这样上面的两个问题都解决了,因为是异步,如果缓存模块宕机,可以不影响用户模块;又因为是异步,时间从成本变小了,用户模块存储完就返回了,只是有另外的线程去执行搜索模块,缓存模块和...模块。

二、RabbitMQ安装

这里安装还是用Daocker安装。下面是docker-compose管理需要的yml文件:

version: "3.1"
services:
  rabbitmq:
    image: daocloud.io/library/rabbitmq:management  # 这里的版本我们要选择后缀有management的,因为我们除了用rabbitmq还要用其图形化界面,这里就选版本是management,不选x.xmanagement
    restart: always
    container_name: rabbitmq
    ports:
    - 5672:5672
    - 15672:15672  # 这个是图形化管理界面的端口号,一定要把他也映射上
    volumes:
    - ./data:/var/lib/rabbitmq  # 我们上面已经说过,rabbitmq会对消息持久化,因此我们用volume映射一下这个数据,方便查看。(为了保证消息不会丢失)

 

下面我们到xterm中安装一下:

首先进入opt目录下;然后创建docker-rabbitmq文件夹;然后vi docker-compose.yml;然后粘贴上面的yml文件内容,保存;并运行。

技术分享图片

 

 下面就可以访问一下,当然我们这里不是访问Rabbit,而是访问rabbitmq的图形化界面:这里有个默认的用户名和密码是guest和guest,这里面的内容等讲Rabbitmq的架构时再讲。

技术分享图片技术分享图片

 

 三、RabbitMQ架构

3.1 官方的简单架构图

我这里先大致描述一下下图:这是来自官网的一张图片,我们可以看到最左侧是Publisher,最右侧是Consumer。这两者是没有直接交互的。Publisher是发布消息的,就相当于上面的用户模块,他除了要完成自身的使命保存数据,还要发布消息(调用搜索模块和缓存模块等);而Consumer就是消费消息的,但是这里的消费消息并非是Publisher发布的消息,而是经过处理的消息;这个处理的过程就是RabbitMQ的使命了。我们可以看到RabbitMQ中有两个部分,第一个是Exchange,是与Publish交互的,他接收Publihser发布的消息,然后通过一定的策略转存储到Queue中;而这个Queue和Consumer交互。

  1. Publisher-生产者:发布消息到RabbitMQ中的Exxchange;
  2. Consumer-消费者:监听RabbitMQ中的Queue中的消息;
  3. Exchange-交换机:和生产者建立连接并接收生产者的消息;
  4. Queue-队列:Exchange会将消息分发到指定的Queue,Queue和消费者进行交互;
  5. Rotes-路由:交换机以什么样的策略将消息发布到Queue。

技术分享图片

 

 

这样的话对于上面的问题,我们在客户模块和下面的搜索模块、缓存模块和...模块间用RabbitMQ就可以解决了,即可以解决:一个模块宕机问题;同步通讯成本问题(现在是异步)。

技术分享图片

 

下面我们再讲一下Rabbitmq的详细架构图,我们可以知道上面我们访问的官网显示的都是什么意思。

3.2 RabbitMQ的完整架构图

技术分享图片

 

 这个图我来解释一下,其实和上面的是一样的,只是这里展示了如何使用RabbitMQ。

要想使用RabbitMQ,首先我们得有RabbitMQ;然后RabbitMQ里面有许多Vrtual Host,即虚拟机,如果我们点开RabbitMQ的Admin会发现里面有一个Virtual Host叫/,RabbitMQ里面有许多Vitural Host,我们这里用的虚拟机是test,我们需要建;然后每个虚拟机里面有许多Exchange和Queue

3.3 查看图形化界面并创建一个Virtual Host

 这里查看图形化界面并创建一个Virtual Host,以便我们后面对RabbitMQ的使用。

 在RabbitMQ的首页,展示的是Overview页面,这个是展示RabbitMQ所有信息的页面,但是不作为我们的重点。

4.9 RabbitMQ-开源消息代理软件

原文:https://www.cnblogs.com/G-JT/p/14189909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!