• Linux安装RabbitMQ并整合SpringBoot简单使用


      过多的描述就不扯了,本文主要记录RabbitMQ的安装以及简单使用。本次安装是为了实现spring cloud的消息总线:SpringCloud全家桶学习之消息总线---SpringCloud Bus

    一、RabbitMQ安装

    1.下载Erlang的rpm包

      RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ版本匹配:https://www.rabbitmq.com/which-erlang.html

      Erlang下载地址:https://www.rabbitmq.com/releases/erlang/(根据自身需求及匹配关系,下载对应rpm包)

    2.下载RabbitMQ的rpm包

      RabbitMQ下载地址:https://www.rabbitmq.com/releases/rabbitmq-server/(根据自身需求及匹配关系,下载对应rpm包)

    3.下载socat的rpm包

      rabbitmq安装依赖于socat,所以需要下载socat。

      socat下载地址:http://repo.iotti.biz/CentOS/6/x86_64/socat-1.7.3.2-1.el6.lux.x86_64.rpm

      根据自身需求下载对应系统socat依赖:(http://repo.iotti.biz/CentOS/)

    4.分别安装Erlang、Socat、RabbitMQ(一定按照顺序!)

      一定按照以下顺序安装

      ①rpm -ivh erlang-18.3-1.el6.x86_64.rpm

      ②rpm -ivh socat-1.7.3.2-1.el6.lux.x86_64.rpm

      ③rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm 

    5.配置rabbitmq:vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

      

     6.安装管理插件:rabbitmq-plugins enable rabbitmq_management

     6.启动RabbitMQ,浏览器访问:http://192.168.64.128:15672/,出现以下界面说明安装完成!

      ①cd /usr/lib/rabbitmq/bin

      ②./rabbitmq-server start

    二、工作模型

      当producer(consumer)要生产(消费)消息时,需要与服务器建立一个长连接,在RabbitMQ中称为Connection,为解决客户端与服务端所产生频繁连接的问题,由于会大量的消耗服务器内存,这里引入消息通道的概念,在保持长连接的情况下,可以通过建立Channel的方式与服务器通讯,当有请求时就会建立通道,结束则关闭通道。在RabbitMQ中,一般的做法不会让消息直接发送到消息队列中,这里引入了Exchange(交换机)的概念,通过交换机来实现消息更加灵活的分发,交换机没有实际的进程,而队列是有的,它只是一个地址列表,在队列创建的时候会与Exchange绑定一个专属的key,在生产者生产消息的时候也会指定这个key,那么Exchange就会通过这个key去匹配Queue,从而实现灵活分发。然后消费方会通过订阅指定的队列去消费消息。在RabbitMQ中有Virtual Host虚拟机的概念,它可以当成是一个小型的MQ,一个RabbitMQ服务器上可以有多个虚拟机,相互之间是隔离的,当然不同的虚拟机之间可以有相同的交换机与队列,可以实现资源的隔离。

    三、RabbitMQ的5种模式

    1、简单模式(一对一的发送)

     ①生产者发送消息给交换机

    ②交换机接收消息,如果交换机没有绑定队列,消息扔进垃圾桶

    ③队列接收消息,存储在内存,等待消费者连接监听获取消息,消费成功后,返回确认

    一些场景:短信,QQ

    2、工作模式(资源的争抢)

     ①生产者将消息发送给交换机

    ②交换机发送给绑定的后端队列

    ③一个队列被多个消费者同时监听,形成消息的争抢结构:根据消费者所在的系统的空闲、性能争抢队列中的消息

    一些场景:抢红包

    3、发布订阅(交换机类型为fanout)

     注:图中未画消费者

    ①交换机定义类型为:fanout

    ②交换机绑定多个队列

    ③生产者将消息发送给交换机,交换机复制同步消息到后端所有的队列中

    一些场景:邮件群发

    4、路由模式(交换机类型:direct)

    ①交换机定义类型为:direct

    ②交换机绑定多个队列,队列绑定交换机时,给交换机提供了一个routingkey(路由key)

    ③发布订阅时,所有fanout类型的交换机绑定后端队列用的路由key都是“”;在路由模式中需要绑定队列时提供当前队列的具体路由key

    一些场景:错误消息的接收和提示

    5、主题模式(交换机类型:topic)

    ①交换机定义类型为:topic

    ②交换机绑定多个队列,与路由模式非常相似,做到按类划分消息

    ③路由key队列绑定的通配符如下:#表示任意字符串,*表示没有特殊符号(单词)的字符串

    四、RabbitMQ整合至SpringBoot

    1、项目准备  

      producer端、consumer端代码地址:https://github.com/Simple-Coder/rabbitmq

    2、直连型交换机Exchange

      访问http://192.168.56.100:15672,查看rabbtimq的管理页面,看到消息推送成功

    再看看队列显示已经推送到队列中

     

    直连交换机是一对一,那如果咱们配置多台监听绑定到同一个直连交互的同一个队列,会怎么样?

    可以看到是实现了轮询的方式对消息进行消费,而且不存在重复消费。

    3、主题交换机Exchange

    3.1 top测试

    TopicManReceiver监听队列1,绑定键为:topic.man
    TopicTotalReceiver监听队列2,绑定键为:topic.#
    而当前推送的消息,携带的路由键为:topic.man

    可以看到两个监听消费者receiver都成功消费到了消息,因为这两个recevier监听的队列的绑定键都能与这条消息携带的路由键匹配上。

     3.2 topic主题测试

      调用接口/sendTopicMessage2。

      TopicManReceiver监听队列1,绑定键为:topic.man
      TopicTotalReceiver监听队列2,绑定键为:topic.#
      而当前推送的消息,携带的路由键为:topic.woman

      所以可以看到两个监听消费者只有TopicTotalReceiver成功消费到了消息

    4、fanout Exchange扇型交换机

     可以看到只要发送到 fanoutExchange 这个扇型交换机的消息, 三个队列都绑定这个交换机,所以三个消息接收类都监听到了这条消息。

  • 相关阅读:
    九月三十学习报告
    九月二十九学习报告
    九月二十八学习报告
    九月二十七学习报告
    九月二十五学习报告
    九月二十四学习报告
    九月二十三学习报告
    九月二十二学习报告
    九月二十学习报告
    网络协议中HTTP,TCP,UDP,Socket,WebSocket的优缺点/区别
  • 原文地址:https://www.cnblogs.com/rmxd/p/11583932.html
Copyright © 2020-2023  润新知