在这篇文章中,就介绍一下RabbitMQ的持久化机制,和它的使用。 (1)exchange持久化,在声明时指定durable=>1 (2)queue持久化,在声明时指定durable=>1
理清路由机制是了解RabbitMQ来龙去脉的关键。在前面的例子中我们常常遇见这三个概念:exchange,routingKey和queue。真正地消息传输流程是消息先到exchange,然后exchange根据对应的routingKey放入queue,如果routingKey不匹配则丢弃。
RabbitMQ是使用Erlang开发的,开源的,一个在高级消息队列协议(AMQP)基础上完整的,可复用的企业消息系统。
在安装和配置完成RabbitMQ之后,我们就可以尝试做一个最简单的例子:发送和接收消息。
要了解RabbitMQ的路由机制,exchange是一个关键。exchange可以叫做交换机,也似乎可以叫做路由器,反正它是用来选择路由 的。前文说到,RabbitMQ的核心思想就是消息的发布者不是直接把消息发送到目标队列中的,事实上,通常它并不知道消息要发到哪个队列中,它只知道把 消息队列发送到exchange中。exchange一边接收发送者发过来的消息,而另一边则把消息发送到目标队列中去。
当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本。AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。然这种降低耦合的机制是基于与上层产品,语言无关的协议。AMQP协议是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。
什么是AMQP高级消息队列协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。 我们的宗旨是通过AMQP,让消息中间件的能力最终被网络本身所具有,并且通过消息中间件的广泛使用发展出一系列有用的应用程序。
RabbitMQ.net客户端通过自定义的Binding和Transport Binding Element扩展了WCF,使之能够在AMQP协议上使用。在WCF中,Binding作为一系列Binding Elements的栈,控制了消息传输的大部分方面如安全,消息格式,事务等等。而Binding中的Transport Binding Element传输绑定元素,则指定了服务端和客户端之间的通信协议。
高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和客户端可以投入使用。
RPC是在计算中是一种常见的模式,是通常我要用消息队列来实现RPC有3个关键点:1.服务的寻址2.消息的接收3.消息的关联 在RabbitMQ的.net客户端里,提供了2个类:SimpleRpcClient和SimpleRpcServer来让我们方便的开发RPC应用。因为RabbitMQ的RPC一定是基于队列的,所以在客户端和服务端都需要要一个各自的队列,客户端的队列用来接收服务回复的数据,服务端的队列用来缓存需要调用的服务的Request。
rabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。 开源协议消息持久1)将交换机置为可持久;2)将通道置为可持久3)消息发送时设置可持久。当我们“生产”了一条可持久化的消息,尝试中断MQ服务,启动消费者获取消息,消息依然能够恢复。相反,则抛出异常。
RabbitMQ 入门-安装_配置_管理
RabbitMQ MessageQueue MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。 RabbitMQ是流行的开源消息队列系统,用erlang语言开发。 RabbitMQ是AMQP(高级消息队列协议)的标准实现。
HornetQ 是一个开源的软件项目。它的目标是一个多协议、可嵌入、高性能、可集群的异步消息系统。 HornetQ 是一个消息中间件(MoM)。有关MoM和其它消息相关的概念解释请参见 Chapter 4, 消息的相关概念。
JMS源于企业应用对于消息中间件的需求,使应用程序可以通过消息进行异步处理而互不影响。Sun公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能够和其他消息组件进行通信。JMS的基本构件连接工厂连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQ Connection Factory。连接JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。会话JMS Session是生产和消费消息的一个单线程上下文。
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。选择ActiveMQ作为JMS的入门学习中间件,是因为其拥有以下优点1.多种语言和协议编写客户端。语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议:OpenWire,StompREST,WSNotification,XMPP,AMQP2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)
与方法调用不同的是,消息的发送者不需要等待接收者的响应,而方法调用必须等待接收者的响应。消息处理的好处可以采用消息队列的方式,异步传递消息可以可靠的传递消息,JMS可以持久的存储消息两种类型的消息处理点对点消息处理:JMS把每一个消息传递给一个消息消费者。发布/订阅消息处理:把消息发送给某个主题,每个主题可以有多个消息订阅者,最终由JMS子系统把消息的副本传递给主题的每一个订阅者。
WebSphere MQ 的最小故障转移单元是队列管理器。通常,包括队列管理器的资源组还包含卷组或磁盘组(已保留,以供资源组专门使用)中的共享磁盘和 IP 地址(用于连接队列管理器)。还可能包括其他 WebSphere MQ 资源,例如同一资源组中的侦听器或触发器监视器(作为独立资源或处于队列管理器本身的控制之下)。
如何利用jgroups实现分布式环境下消息的接受和发送为了提高应用的性能,我们准备实现分布式cache,所以我特别研究了oscache关于分布式实现的部分.我们知道为了实现分布式环境下消息的通知,目前两种比较流行的做法是使用JavaGroups[http://www.jgroups.org]和JMS。这两种方式都在底层实现了广播发布消息。由于JGroups可以提供可靠的广播通信.所以我们准备采用JGroups.我自己写了一个JavaGroupBroadcastingManager.java类实现消息的管理(包括发送和接收),代码参考了oscache的相关代码,在其基础上进行了改进.
本文介绍如何配置Tomcat和Terracotta服务器将普通的Web应用部署到集群中,实现跨Tomcat节点的session复制,以达到负载均衡、提高系统吞吐量和灾难恢复的效果。基本原理简介一般利用Tomcat搭建Web应用集群有如下几种方法:1、利用负载均衡器的粘session的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。