rabbit原理及项目应用
1.rabbitMQ是什么?
mq是由erlang语言开发的开源的amqp的实现。
2.rabbitMQ的基本原理是什么?
使用RabbitMQ,首先需要与rabbitMQ的visiu host建立连接,visiu host使用exchange和quence组成,当客户端与visiu host建立连接后,还不能发送命令,
需要创建信道channel,然后通过channel来发送命令command和消息,到了visiu host,exchange和quence之间是通过binding形成绑定的,从而形成一个路由表,
然后通过路由表发送给不同的quence。
3.rabbitMQ的集中使用模式?
一种有6种;分别是:简单模式,工厂模式,发布订阅模式,路由模式,topics路由模式,rpc模式
简单模式:一个生产者,一个消费者,一个消息队列(没有exchange概念)
工厂模式:一个生产者,多个消费者,一个消息队列(没有exchange概念)
exchange的三种类型:fanout,direct,topics
发布订阅模式:一个生产者,多个消费者,一个exchange 类型fanout{广播类型},多个队列;
路由模式:一个生产者,多个消费者,一个exchange 类型direct{定向类型},多个队列;
主题模式:一个生产者,多个消费者,一个exchange类型topic{通配符匹配类型},多个队列;
4.实际项目中使用mq
<description>rabbitmq 连接服务配置</description>
<!--链接工厂配置,mq地址,mq用户名,mq密码,虚拟主机-->
<rabbit:connection-factory id="connectionFactory" addresses="${mq.address}" username="${mq.username}" password="${mq.password}" virtual-host="/"/>
<!--管理员 <rabbit:admin connection-factory="connectionFactory"/>
<!-- mq模板声明,message-converter意思是可以将object类型转化成json传输,也可以将json类型转成object-->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" /> <!-- 使用jsckson执行消息转化 -->
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /> <!--定义exchange的类型,绑定键和queue,是否自动删除-->
<rabbit:direct-exchange name="${exchange_name}" auto-delete="false">
<rabbit:bindings>
<rabbit:binding key="${routing_key}" queue="${queue_name}"/>
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 定义queue-->
<!--<rabbit:queue id="queue_id" name="${queue_name}" auto-delete="false" durable="true"/>--> <!-- 配置queue的监听 -->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener ref="listen_class" queues="${queue_name}"/>
</rabbit:listener-container>
</beans> 生产者:amqpTemplate.convertAndSend(exchange, roteKey, message);
消费者:
public class SelfListener implements MessageListener { @Override
public void onMessage(Message message) {}
}
rabbit原理及项目应用的更多相关文章
- HDS Truecopy实现原理及项目的选择-诸多案例
copy from:http://www.eygle.com/archives/2009/05/hds_truecopy_dataguard.html 诸多案例:http://wenku.baidu. ...
- 广告行业中那些趣事系列6:BERT线上化ALBERT优化原理及项目实践(附github)
摘要:BERT因为效果好和适用范围广两大优点,所以在NLP领域具有里程碑意义.实际项目中主要使用BERT来做文本分类任务,其实就是给文本打标签.因为原生态BERT预训练模型动辄几百兆甚至上千兆的大小, ...
- LCN解决分布式事务原理解析+项目实战(原创精华版)
写在前面: 原创不易,如果觉得不错推荐一下,谢谢! 由于工作需要,公司的微服务项目需解决分布式事务的问题,且由我进行分布式事务框架搭建和整合工作. 那么借此机会好好的将解决分布式事务的内容进行整理一下 ...
- 编译原理根据项目集规范族构造LR(0)分析表
转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- Rabbit原理理解
1.RabbitMQ知多少 圣杰 2.[RabbitMQ]——三种Exchange模式(Fanout.Direct.Topic) https://blog.csdn.net/hao134838/a ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
- 《HiWind企业快速开发框架实战》(2)使用HiWind创建自己的项目
<HiWind企业快速开发框架实战>(2)使用HiWind创建自己的项目 关于HiWind HiWind企业快速开发框架,是基于.NET+EasyUi(支持各种前端扩展,后面将扩展Boot ...
- cocos2d-x创建新项目模板
1.起因 长期使用项目中自带的HelloWorldScene来创建模板工程,不知大家有木有感到厌烦? 我是个懒人,所以就弄了个新的模板工程.这样最起码可以不用每次都把HelloWorldScene删掉 ...
随机推荐
- WEB学习笔记2-结构组织和文件命名
常用的前端文件的组织结构: .js(放置javascript代码) .lib(放置框架javascript文件) .custom.js .css(放置CSS样式代码) .lib(放置框架CSS文件) ...
- Ubuntu和Linux的区别
大家听别人介绍自己的Ubuntu时,会听到“我的操作系统是Linux的”.其实,这样介绍是缺乏严谨性滴.我们只要知道两点,基本上就搞清楚Linux和Ubuntu的关系: 1. 严格来说,Linu ...
- python从零开始 -- 第1篇之环境搭建
事实上,网络上有很多相应的教程,本文无意做成文章的粘贴展示板,附上我认为的简易的安装详解: 安装 Python 环境(编程小白的第一本 Python 入门书),包含了python以及相关的IDE,图文 ...
- Vector的用法
vector容器是笔试时最经常用到的容器,它实际是一个类模板,它所具有一些成员函数我们必须熟练使用,这样才会加快编程速度. 首先加头文件并定义: #include<vector> vect ...
- uniapp如何将微信小程序API封装为Promise
var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/; var CALL ...
- angular6实现对象转换数组对象
1 使用表单获取到数据以后,是对象类型的数据如下图 而后台需要返回的数据是这种key:value的形式传入 2 废话不多说直接上代码(代码只截取部分,仅供参考跑不起来,最后又一个小demo可以运行 ...
- C++实验七
#include <iostream> using namespace ::std; int main() { ios_base::fmtflags original_flags = co ...
- 锋利的jQuery初学(5)
层级选择器: 层级选择器 符号 解释 使用 空格 后代选择器 $("div p").css("","") + 紧邻选择器 $("d ...
- getRealPath()和getContextPath()的区别
转载自:http://sucre.iteye.com/blog/319178 在程序中常常要获取文件的路径,有的时候需要用到相对路径而有的时候就要用到绝对路径,一提到绝对路径大家一定想到了getRea ...
- js ·节点的知识点
1. DOM document object model (1) 节点树状图 Document>documentElement>body>tagname 2. 我们常用的节点类型 元 ...