zoukankan      html  css  js  c++  java
  • Rabbitmq 消息对列 生产者与消费者的具体实现 springboot

    RabbitMQ 基本介绍

    RabbitMQ的设计理念是.只要有接收消息的队列. 邮件就会存放到队列里. 直到订阅人取走. . 如果没有可以接收这个消息的消息队列. 默认是抛弃这个消息的..

    我实现的功能是将远程实现两

    Publisher:

              是Message的生产者,Publisher这个Clients产生了一些Message。

    Consumer:

              Message的消费者,Publisher产生的Message,最终要到达Consumer这个Clients,进行消费。

    Exchange:

             指定消息按什么规则,路由到哪个Queue,Message消息先要到达Exchange,在Server中承担着从Produce接收Message的责任。

    Queue:

             到达Exchange的消息,根据制定的规则(Routing key)到达对应的Queue,在Server中承担着装载Message,是Message的容器,等待被消费出去。

    Routing key:

             在Exchange和Queue之间隐藏有一条黑线,可以将这条黑线看成是Routing key,Exchange就是根据这些定义好的Routing key将Message送到对应的Queue中去,是Exchange和Queue之间的桥梁。

    Broker:

            之前一直不理解这个Broker,其实Broker就是接收和分发消息的应用,也就是说RabbitMQ Server就是Message Broker。

    VirtualHost:

            虚拟主机,一个Broker里可以开有多个VirtualHost,它的作用是用作不同用户的权限分离。

    Connection:

           是Publisher/Consumer和Broker之间的TCP连接。断开连接的操作只会在Publisher/Consumer端进行,Broker不会断开连接,除非出现网络故障或者Broker服务出现问题,Broker服务宕了。

    Connection: Channel: 

            如果每一次访问RabbitMQ就建立一个Connection,那在消息量大的时候建立TCP Connection的开销就会很大,导致的后果就是效率低下。

    左边的Client向右边的Client发送消息,流程:
           第一:获取Conection
           第二:获取Channel
           第三:定义Exchange,Queue
           第四:使用一个RoutingKey将Queue Binding到一个Exchange上
           第五:通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上,
           第六:Consumer在接收时也是获取connection,接着获取channel,然后指定一个Queue,到Queue上取消息,它对Exchange,RoutingKey及如何Binding都不关心,到对应的Queue上去取消息就行了。

            一个Publisher Client发送消息,哪些Consumer Client可以收到消息,在于Exchange,RoutingKey,Queue的关系上。

           RabbitMQ的简单理论知识就介绍这么多,下篇博客介绍RabbitMQ在CentoOS7上的安装和配置。

    首先要区别AMQP协议mandatory和immediate标志位的作用。

    mandatory和immediate是AMQP协议中basic.pulish方法中的两个标志位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。具体区别在于:
    1. mandatory标志位
    当mandatory标志位设置为true时,如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返还给生产者;当mandatory设为false时,出现上述情形broker会直接将消息扔掉。
    2. immediate标志位
    当immediate标志位设置为true时,如果exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者。

    如想使用RabbitMQ 需要先安装 erlang 虚拟机 在安装RabbitMQ 服务器 具体实现请查看 我的上一篇博客

    具体的代码参考请参考参考资料 良心制作 环境Springboot +maven +IDEA

     https://gitee.com/xdymemory00/RabbitMQ.git

     

  • 相关阅读:
    JS中利用正则表达式提取一个字符串中的子字符串的方法
    Xcode的环境变量列表
    在未安装Visual Studio 2012的服务器上使用MSBuild以文件系统方式发布ASP.NET MVC系统
    使Web API支持二级实体操作,兼对RESTFul风格API设计的疑惑。
    忽略大小写的字符串包含测试
    Entity Framework里不用查询直接更新的办法
    iOS里生成灰化(黑白)图像
    微信小程序开发调试工具
    微信小程序产品定位及功能介绍
    微信小程序DEMO初体验
  • 原文地址:https://www.cnblogs.com/memoryXudy/p/8039005.html
Copyright © 2011-2022 走看看