(一)理解消息通信

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(小总结 持续更新...的更多相关文章

  1. Mysql注入小tips --持续更新中

    学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...

  2. [Tools] Eclipse使用小技巧-持续更新

    [背景] 使用之中发现一些eclipse使用的小技巧,记录下来供以后查阅   Eclipse保存preferences,并导入到其他workspaces The Export wizard can b ...

  3. golang 小知识-持续更新中

    Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,ar ...

  4. Python小练习(持续更新....)

    最近一直在学习python,这些小练习有些是书上的,有些是别人博客上的! # 1.题目1# 给一个字符串,统计其中的数字.字母和其他类型字符的个数:# 比如输入“124mid-=”,输出:数字=3,字 ...

  5. cad问题小百科 持续更新

    一些浩辰的问题移步去: 浩辰问题        (浩辰可能和桌子具有相同的问题,所以这篇你可能还是要看 cad2007遇到了这种情况 安装问题安装CAD出现C++2005问题的解决方法,出现此问题,原 ...

  6. pandas常用小trick(持续更新)

    记录一下pandas常用的小技巧,时间长了干别的去了会忘记,记录一下: 1. 在处理数据过程中涉及到label和null的处理方法 # 方法一 df['height'][df.height < ...

  7. web端小知识点--持续更新

    1.弹性滚动overflow:auto; -webkit-overflow-scrolling: touch; -mo-overflow-scrolling: touch; overflow-scro ...

  8. nginx(tengine)的一些小优化(持续更新)

    1.nginx日志切割脚本 需求来源:nginx本身并没有日志切割的功能,由访问产生的大日志很难进行分析. 实现目的:每天对nginx日志进行切割,并备份至指定文件夹. 简要指令: mv /usr/l ...

  9. django项目实际工作中的配置以及一些有用的小工具(持续更新)

    常用pycharm快捷键:   https://www.cnblogs.com/luolizhi/p/5610123.html   Ctrl + F1  显示错误 Ctrl + Alt + Space ...

随机推荐

  1. 去除 Google 重定向

    1. 安装插件 redirector : https://code.google.com/p/chrome-redirector/ 2. 配置规则,如下: 匹配:https?://www\.googl ...

  2. autoloader

    自动加载 $loader = new Zend_Application_Module_Autoloader(array(     'namespace' => 'Blog',     'base ...

  3. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --> <settings ...

  4. BADI_MATERIAL_CHECK(物料主数据表的增强检查)

    多次调用的BADI,'业务加载项定义的多重使用意味着可以有多个活动的 业务加载项实施.在进行调用时,将调用所有上述实施,但调用顺序不可预期. 因此,如果使用多重使用 业务加载项定义,那么顺序不得起到任 ...

  5. supervisor centos安装

    一.安装配置supervisor 1.安装python自动化工具    #yum install python-setuptools 2.#easy_install supervisor安装super ...

  6. Angular自定义指令directive:scope属性

    在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令.自定义指令,是为了扩展DOM元素的功能.代码中,通过指定directive中的restrict属性,来决定这个指令是作为 ...

  7. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  8. IOS多媒体

    概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像 ...

  9. 完美解决google无法访问

    1.进入短信界面 2.菜单-设置 3.修改短信中心号码(Set the SIM's smsc number) 保存 [测试结果]:提示保存成功,但是号码没有改变,退出重新进入设置才会看到号码更新 [预 ...

  10. bzoj 3530: [Sdoi2014]数数

    #include<cstdio> #include<iostream> #include<cstring> #define M 1509 #define MO 10 ...