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
Rabbitmq 消息对列 生产者与消费者的具体实现 springboot的更多相关文章
- RabbitMQ 消息确认与公平调度消费者
		
一.消息确认 为了确保消息一定被消费者处理,rabbitMQ提供了消息确认功能,就是在消费者处理完任务之后,就给服务器一个回馈,服务器就会将该消息删除,如果消费者超时不回馈,那么服务器将就将该消息重新 ...
 - RabbitMQ的使用(五)RabbitMQ Java Client简单生产者、消费者代码示例
		
pom文件: <dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artif ...
 - php rabbitmq操作类及生产者和消费者实例代码 转
		
注意事项: 1.accept.php消费者代码需要在命令行执行 2.'username'=>'asdf','password'=>'123456' 改成自己的帐号和密码 RabbitMQC ...
 - RabbitMQ简单Java示例——生产者和消费者
		
添加Maven依赖: 使用rabbitmq-client的最新Maven坐标: <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp ...
 - RabbitMQ连接池、生产者、消费者实例
		
1.本文分享RabbitMQ的工具类,经过实际项目长期测试,在此分享给发家,各位大神有什么建议请指正 !!! 2.下面是链接池主要代码: import java.util.HashMap; impor ...
 - nopCommerce 3.9 大波浪系列 之 事件机制(生产者、消费者)
		
一.nop事件机制简介 应用场景:客户支付成功后,需要发送短信.邮件告知客户订单支付成功(短信.邮件由不同模块实现) 实现方法: 1.定义支付成功OrderPaidEvent事件. 2.定义短信,邮箱 ...
 - RabbitMQ消息队列之二:消费者和生产者
		
在使用RabbitMQ之前,需要了解RabbitMQ的工作原理. RabbitMQ的工作原理 RabbitMQ是消息代理.从本质上说,它接受来自生产者的信息,并将它们传递给消费者.在两者之间,它可以根 ...
 - 十五、.net core(.NET 6)搭建RabbitMQ消息队列生产者和消费者的简单方法
		
搭建RabbitMQ简单通用的直连方法 如果还没有MQ环境,可以参考上一篇的博客,在windows系统上的rabbitmq环境搭建.如果使用docker环境,可以直接百度一下,应该就一个语句就可以搞定 ...
 - python+rabbitMQ实现生产者和消费者模式
		
(一)安装一个消息中间件,如:rabbitMQ (二)生产者 sendmq.py import pika import sys import time # 远程rabbitmq服务的配置信息 user ...
 
随机推荐
- So you've been rejected, now what? On appeals in peer-reviewed publications(From Wiley Exchanges)
			
Getting rejected stinks. Wouldn’t it be great if we could appeal people’s decisions in life? Imagine ...
 - jmeter 使用cookie管理器
			
1.jmeter.properties 中 将CookieManager.save.cookies 设置为true 2.添加一个cookie管理器,什么都不用填 3.把需要用到的请求放到登录后面.后 ...
 - SuSE 网卡配置模板
			
heidsoft:/etc/sysconfig/network # cat ifcfg.template ## This is a template for a network interface c ...
 - 22-python爬虫解决gbk乱码问题
			
转载自: python爬虫解决gbk乱码问题 今天尝试了下爬虫,爬取一本小说,忘语的凡人修仙仙界篇,当然这样不好,大家要支持正版. 爬取过程中是老套路,先获取网页源代码 # -*- coding: ...
 - Mybatis 实用篇(四)返回值类型
			
Mybatis 实用篇(四)返回值类型 一.返回 List.Map List<User> getUsers(); <select id="getUsers" re ...
 - BUILDING ANGULAR APPS USING FLUX ARCHITECTURE
			
Flux is an architectural pattern based on unidirectional data flow. Although it is originated in the ...
 - iOS6后的内存警告处理
			
[iOS6后的内存警告处理] The memory used by a view to draw itself onscreen is potentially quite large. However ...
 - android studio使用真机测试时点击Debug调试模式时报Error running app:No target device found,点击运行模式却是启动正常的
			
原因是adb没检测到设备(包括真机和虚拟机). 在Terminal执行adb devices命令,查看有没有连接到的设备. 如果没有设备,确认虚拟机是否正确打开,真机是否连接打开USB调试并安装驱动. ...
 - Linux执行YUM命令报错解决方案
			
Loaded plugins: rhnplugin, security This system is not registered with RHN. RHN support will be disa ...
 - Shell 常用命令总结
			
Shell常用命令总结 1 ls命令:列出文件 ls -la 列出当前目录下的所有文件和文件夹 ls a* 列出当前目录下所有以a字母开头的文件 ls -l *.txt 列出当前目录下所有后缀名 ...