RABBITMQ(小总结 持续更新...
(一)理解消息通信
1.消息通信概念---消费者、生产者和代理
生产者(producer)创建消息,然后发送到代理服务器(RaabitMQ)。
其中消息包括两部分内容:有效载荷(payload)和标签(label)。
有效载荷就是你想要传输的数据,它可以是任何内容。
标签描述了有效载荷,并且RabbitMQ用它来决定谁来将获得消息的拷贝。
RaabitMQ会根据标签将消息发送到感兴趣的接收方。----“发后即忘”的单向通信方式。
消费者(consumer)连接到代理服务器(RaabitMQ)并订阅到队列(queue)上。
这里解释一下“连接”的意思。消费者与生产者都必须首先连接到RaabitMQ,才能消费或发布消息。即生产者或消费者与RaabitMQ代理服务器之间创建一条TCP连接。
一旦TCP连接打开(你通过了认证),生产者或消费者就可以创建一条AMQP信道(channel),信道是建立在“真实的”TCP连接内的虚拟连接。AMQP命令都是通过信道发送出去
的。每条信道都会被指派一个唯一ID(AMQP库会帮你记住ID的)。所以,不论发布消息,订阅队列或是接收消息,这些动作都是通过信道完成的。
总之,RaabitMQ可以看做是软件的路由器。
2.AMQP元素---转发器、队列、绑定
生产者将消息发布到转发器上,消息最终到达队列,并被消费者接收;绑定决定了消息如何从路由器路由到特定的队列。
每个rabbitmq-server叫做一个Broker,等着tcp连接进入。
在rabbit-server进程内有Exchange,定义了这个消息的发送类型。(一对多、直连、多对多等)。
Queue是进程内的逻辑队列,有多个,有名字。
Binding联系Exchange与Queue。
Routingkey由生产者指定。Bidingkey由消费者指定。二者联合决定一条消息的来去。
最基本的rabbitmq连接代码:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("xxxxxx");
factory.setPort(xxxx);
factory.setUsername("xxx");
factory.setPassword("xxx");
Connection connection =factory.newConnection();
final Channel channel =connection.createChannel();
最后这个channel就可以用来收和发消息了。
声明exchange与queue:
channel.exchangeDeclare("logs","fanout");
(对列名称 类型 是否持久化,不使用时是否自动删除,是否是内部的(不能被客户端使用),其他参数)
String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, EXCHANGE_NAME, "");
channel.queueDeclare (对列名称,是否持久化,独占的queue(仅供此连接),不使用时是否自动删除,其他参数)
channel.queueBind (对列名称,交换机名字,此次绑定使用的路由关键字,其他参数)
发出消息:
String message=""; channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes());
RABBITMQ(小总结 持续更新...的更多相关文章
- Mysql注入小tips --持续更新中
学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...
- [Tools] Eclipse使用小技巧-持续更新
[背景] 使用之中发现一些eclipse使用的小技巧,记录下来供以后查阅 Eclipse保存preferences,并导入到其他workspaces The Export wizard can b ...
- golang 小知识-持续更新中
Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,ar ...
- Python小练习(持续更新....)
最近一直在学习python,这些小练习有些是书上的,有些是别人博客上的! # 1.题目1# 给一个字符串,统计其中的数字.字母和其他类型字符的个数:# 比如输入“124mid-=”,输出:数字=3,字 ...
- cad问题小百科 持续更新
一些浩辰的问题移步去: 浩辰问题 (浩辰可能和桌子具有相同的问题,所以这篇你可能还是要看 cad2007遇到了这种情况 安装问题安装CAD出现C++2005问题的解决方法,出现此问题,原 ...
- pandas常用小trick(持续更新)
记录一下pandas常用的小技巧,时间长了干别的去了会忘记,记录一下: 1. 在处理数据过程中涉及到label和null的处理方法 # 方法一 df['height'][df.height < ...
- web端小知识点--持续更新
1.弹性滚动overflow:auto; -webkit-overflow-scrolling: touch; -mo-overflow-scrolling: touch; overflow-scro ...
- nginx(tengine)的一些小优化(持续更新)
1.nginx日志切割脚本 需求来源:nginx本身并没有日志切割的功能,由访问产生的大日志很难进行分析. 实现目的:每天对nginx日志进行切割,并备份至指定文件夹. 简要指令: mv /usr/l ...
- django项目实际工作中的配置以及一些有用的小工具(持续更新)
常用pycharm快捷键: https://www.cnblogs.com/luolizhi/p/5610123.html Ctrl + F1 显示错误 Ctrl + Alt + Space ...
随机推荐
- 去除 Google 重定向
1. 安装插件 redirector : https://code.google.com/p/chrome-redirector/ 2. 配置规则,如下: 匹配:https?://www\.googl ...
- autoloader
自动加载 $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Blog', 'base ...
- mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存
设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --> <settings ...
- BADI_MATERIAL_CHECK(物料主数据表的增强检查)
多次调用的BADI,'业务加载项定义的多重使用意味着可以有多个活动的 业务加载项实施.在进行调用时,将调用所有上述实施,但调用顺序不可预期. 因此,如果使用多重使用 业务加载项定义,那么顺序不得起到任 ...
- supervisor centos安装
一.安装配置supervisor 1.安装python自动化工具 #yum install python-setuptools 2.#easy_install supervisor安装super ...
- Angular自定义指令directive:scope属性
在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令.自定义指令,是为了扩展DOM元素的功能.代码中,通过指定directive中的restrict属性,来决定这个指令是作为 ...
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- IOS多媒体
概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像 ...
- 完美解决google无法访问
1.进入短信界面 2.菜单-设置 3.修改短信中心号码(Set the SIM's smsc number) 保存 [测试结果]:提示保存成功,但是号码没有改变,退出重新进入设置才会看到号码更新 [预 ...
- bzoj 3530: [Sdoi2014]数数
#include<cstdio> #include<iostream> #include<cstring> #define M 1509 #define MO 10 ...