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,结合spring框架开发的rabbitmq demo
rabbitMQ安装与使用,目前比较流行的消息中间件,广泛用于各种电商平台数据传输、消息缓存等各种应用场景,文档详细总结了相关安装与使用方法。
本文详细介绍了如何在Spring Boot应用程序中集成并使用RabbitMQ作为消息传递中间件...最后,我们将总结使用Spring Boot与RabbitMQ集成的好处,并给出一些最佳实践建议,以帮助读者在实际项目中更好地应用这一集成方案。
My Spring Boot RabbitMQ ProjectSpring Boot 整合 RabbitMQ 项目,用于个人学习和总结,如果您喜欢,请点个StarRabbit MQ官网:模块介绍:common-api: 基本模块,定义API和常量等等common-consumer: RabbitMQ通用...
第5章 RabbitMQ高级消息的讲解及应用 第6章 ElasticSearch详细讲解及应用 第7章 Eureka分布式服务器的搭建 。。。。。。。。。 第15章 SpringCloud项目实战 。。。。。。。。。 第20章 SpringCloud总结 学习Spring...
【课程简介】 消息队列是个高大上的名词儿,本质上就是如何业务进行...了解这类消息系统使用的步骤和应用场景。 4-1 RabbitMQ (13:41) 第5章 总结 综述消息队列在各种场景使用的方法和注意事项。 5-1 总结.mp4 (02:48)
会为你总结一些有趣的数据,比如在服务中花费的时间百分比,以及操作是否失败。 Zipkin UI 还提供了一个依赖关系图,显示有多少跟踪请求通过了每个应用程序。 这有助于识别聚合行为,包括错误路径或对已弃用服务的...
1.clawer:nodejs相关的爬虫总结 2.require_way:nodejs模块的加载方式 3.clawer_github_stars:nodejs爬取github项目star数 4.upload:nodejs文件上传服务器 5.quickrun: 用进程模块从命令行快速启动应用 6....
使用 Node.js 模拟发起 http 请求...PS: Node的版本>=8.0.0 为了使用 Async / Await PS: 这里加入 auth 字段是为了需要用户名和密码登录的应用的请求 ,比如 rabbitmq ,不需要登录的页面可以去掉这个参数。 第一种 使
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Ka
09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3章 01 网络基础和dos命令 02 为何学习linux 03 课程内容介绍 04 操作系统内核与系统调用 05 操作系统安装原理 06 linux操作系统安装 07 ...
上述内容总结 css选择器 css的存在形式及优先级 css边框以及其他常用样式 css之float样式 css之float实现作业实例 css之display样式 css之内外边距 本周作业以及思路 第15周 上节内容答疑 上节内容回顾 CSS内容...
将为您总结一些有趣的数据,例如在服务中花费的时间百分比以及操作是否失败。 Zipkin UI还提供了一个依赖关系图,该关系图显示了每个应用程序中跟踪了多少个请求。 这对于识别聚合行为(包括错误路径或对不赞成...
基于SpringCloudAlibaba,uni-app,ElasticSearch,RabbitMQ,Redis实现。 随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。...
目录Foundatio 介绍Getting Started缓存队列锁消息工作任务文件存储度量日志示例程序源码总结Foundatio 介绍GitHub : https://github.com/exceptionless/FoundatioFoundatio 是一个插件式的,松耦合的一套构建分布式...
项目总结.avi │ 12.项目中遇到的问题.avi │ 13.quartz.avi │ aa.quartz框架.avi │ 淘淘商城第十二天笔记.docx │ ├─补充1:拔高课程(Redis3.0持久化、集群、MySQL5.6优化、Tomcat7优化) │ │ 打开必读.txt...