`

rabbitmq应用总结

 
阅读更多
http://melin.iteye.com/blog/691265
推荐http://hi.baidu.com/vegeta_ma/item/9929cbe23b20f0246cabb807

1,Connection
连接,与rabbitmq server建立的一个连接,由ConnectionFactory创建,虽然创建时指定了多个server address,但每个connection只与一个物理的server进行连接,此连接是基于Socket进行连接的,这个可以相似的理解为像一个DB Connection。
ConnectionParametersparams = new ConnectionParameters();
params.setUsername(userName);
params.setPassword(password);
params.setVirtualHost(virtualHost);
params.setRequestedHeartbeat(0);
ConnectionFactoryfactory = new ConnectionFactory(params);
Connection conn = factory.newConnection(hostName,
AMQP.PROTOCOL.PORT);
2,Channel
建立在connection基础上的一个通道,相对于connection来说,它是轻量级的。可以这样理解,它就像是hibernate里面的session一样,相对于DB Connection来说,session就是一个轻量级的东西。
Channel channel =conn.createChannel();
注:尽量避免在多线程中使用一个channel,Channeljavadoc有如下说明:
While aChannel can be used by multiple threads, it's important to ensure
that onlyone thread executes a command at once. Concurrent execution of
commandswill likely cause an UnexpectedFrameError to be thrown.
另官方Java Client API Guide里面也同样提到
     Channel thread-safety
In general, Channel instances should not be used by more than one thread simultaneously: applicationcode should maintain a clear notion of thread ownership for Channel instances.If more than one thread needs to access a particular Channel instance, the application should enforcemutual exclusion itself, for example by synchronising on the Channel.
Symptoms of incorrect serialisation of Channel operations include, but are not limited to,de>IllegalStateExceptionde>s with the message "cannot execute more than one synchronous AMQP command at a time", and de>UnexpectedFrameErrorde>s.

3,Exchange,Queue,RoutingKey
Direct Exchange – 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。
Channel channel = connection.createChannel();
channel.exchangeDeclare("exchangeName", "direct"); //direct fanout topic
channel.queueDeclare("queueName");
//channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind("queueName", "exchangeName", "routingKey");

byte[] messageBodyBytes = "hello world".getBytes();
//需要绑定路由键
channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);



Fanout Exchange – 不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

Channel channel = connection.createChannel();
channel.exchangeDeclare("exchangeName", "fanout"); //direct fanout topic
channel.queueDeclare("queueName");
//channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind("queueName", "exchangeName", "routingKey");

channel.queueDeclare("queueName1");
channel.queueBind("queueName1", "exchangeName", "routingKey1");

byte[] messageBodyBytes = "hello world".getBytes();
//路由键需要设置为空
channel.basicPublish("exchangeName", "", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);



Topic Exchange – 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”。我在RedHat的朋友做了一张不错的图,来表明topic交换机是如何工作的:

Channel channel = connection.createChannel();
channel.exchangeDeclare("exchangeName", "topic"); //direct fanout topic
channel.queueDeclare("queueName");
//channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind("queueName", "exchangeName", "routingKey.*");

byte[] messageBodyBytes = "hello world".getBytes();
channel.basicPublish("exchangeName", "routingKey.one", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);
分享到:
评论

相关推荐

    rabbitmq_demo及安装.rar

    总结的rabbitmq的一些安装,应用等等心得及简单demo,结合spring框架开发的rabbitmq demo

    rabbitMQ安装与使用.docx

    rabbitMQ安装与使用,目前比较流行的消息中间件,广泛用于各种电商平台数据传输、消息缓存等各种应用场景,文档详细总结了相关安装与使用方法。

    SpringBoot使用Rabbit详解含完整代码

    本文详细介绍了如何在Spring Boot应用程序中集成并使用RabbitMQ作为消息传递中间件...最后,我们将总结使用Spring Boot与RabbitMQ集成的好处,并给出一些最佳实践建议,以帮助读者在实际项目中更好地应用这一集成方案。

    my-spring-boot-rabbitmq

    My Spring Boot RabbitMQ ProjectSpring Boot 整合 RabbitMQ 项目,用于个人学习和总结,如果您喜欢,请点个StarRabbit MQ官网:模块介绍:common-api: 基本模块,定义API和常量等等common-consumer: RabbitMQ通用...

    SpringCloud视频教程全套百度网盘

    第5章 RabbitMQ高级消息的讲解及应用 第6章 ElasticSearch详细讲解及应用 第7章 Eureka分布式服务器的搭建 。。。。。。。。。 第15章 SpringCloud项目实战 。。。。。。。。。 第20章 SpringCloud总结 学习Spring...

    PHP消息队列实现及应用.txt

    【课程简介】 消息队列是个高大上的名词儿,本质上就是如何业务进行...了解这类消息系统使用的步骤和应用场景。 4-1 RabbitMQ (13:41) 第5章 总结 综述消息队列在各种场景使用的方法和注意事项。 5-1 总结.mp4 (02:48)

    zipkin分布式追踪系统

    会为你总结一些有趣的数据,比如在服务中花费的时间百分比,以及操作是否失败。 Zipkin UI 还提供了一个依赖关系图,显示有多少跟踪请求通过了每个应用程序。 这有助于识别聚合行为,包括错误路径或对已弃用服务的...

    About_Node:学习笔记:有关nodejs的一些示例和摘要

    1.clawer:nodejs相关的爬虫总结 2.require_way:nodejs模块的加载方式 3.clawer_github_stars:nodejs爬取github项目star数 4.upload:nodejs文件上传服务器 5.quickrun: 用进程模块从命令行快速启动应用 6....

    Node.js模拟发起http请求从异步转同步的5种用法

    使用 Node.js 模拟发起 http 请求...PS: Node的版本>=8.0.0 为了使用 Async / Await PS: 这里加入 auth 字段是为了需要用户名和密码登录的应用的请求 ,比如 rabbitmq ,不需要登录的页面可以去掉这个参数。 第一种 使

    ActiveMQ学习总结

    消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Ka

    python入门到高级全栈工程师培训 第3期 附课件代码

    09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3章 01 网络基础和dos命令 02 为何学习linux 03 课程内容介绍 04 操作系统内核与系统调用 05 操作系统安装原理 06 linux操作系统安装 07 ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    上述内容总结 css选择器 css的存在形式及优先级 css边框以及其他常用样式 css之float样式 css之float实现作业实例 css之display样式 css之内外边距 本周作业以及思路 第15周 上节内容答疑 上节内容回顾 CSS内容...

    zipkin:Zipkin是一个分布式跟踪系统

    将为您总结一些有趣的数据,例如在服务中花费的时间百分比以及操作是否失败。 Zipkin UI还提供了一个依赖关系图,该关系图显示了每个应用程序中跟踪了多少个请求。 这对于识别聚合行为(包括错误路径或对不赞成...

    医疗论坛小程序.zip

    基于SpringCloudAlibaba,uni-app,ElasticSearch,RabbitMQ,Redis实现。 随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。...

    .NET 分布式组件库 Exceptionless Foundatio.zip

    目录Foundatio 介绍Getting Started缓存队列锁消息工作任务文件存储度量日志示例程序源码总结Foundatio 介绍GitHub : https://github.com/exceptionless/FoundatioFoundatio 是一个插件式的,松耦合的一套构建分布式...

    Eclipse开发分布式商城系统+完整视频代码及文档

    项目总结.avi │ 12.项目中遇到的问题.avi │ 13.quartz.avi │ aa.quartz框架.avi │ 淘淘商城第十二天笔记.docx │ ├─补充1:拔高课程(Redis3.0持久化、集群、MySQL5.6优化、Tomcat7优化) │ │ 打开必读.txt...

Global site tag (gtag.js) - Google Analytics