随笔分类 - RabbitMQ
消息队列机制
摘要:原文来自于:http://www.imneio.com/2009/10/zeromq_in_dotnet/ ZeroMQ的.NET封装很简单,基本上是来自C-API的,但有所简化。使用上,由于习惯了在C#里面用强类型约束,API上的int类型让我感觉封装得”非常不.NET”。 首先要明确下ZeroMQ的几个概念: 1. Exchange & Queue:Exchange 是系统数据交换的基础,Queue是消息通道,当Exchange与Queue绑定后,向Exchange提交消息,就会流到其绑定的Queue(s)中。 2. 接收端创建一个Queue后,就能从里面获取内容。 3.Zmq_s
阅读全文
摘要:导读:本文是从《Message Queue Shootout!》这篇文章翻译而来,译文来自外刊IT评论《消息队列软件产品大比拼》。 内容如下: 我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。 为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一起做了个测试。我让每个消息产品各发送和接受1百万千条1K的消 息。测试准备的有些仓促,我并没有修改任何的配置,只是快速的看了一下它们的安装文档,安装好每种软
阅读全文
摘要:1,temporary queue(由server自动命名)在关闭连接时会自动从server端清除2,basicConsumer,basicGetchannel.basicConsume(queue, noAck, queueingConsumer);channel.basicGet(queue, noAck);noAck = true,不需要回复,接收到消息后,queue上的消息就会清除noAck = false,需要回复,接收到消息后,queue上的消息不会被清除,直到调用channel.basicAck(deliveryTag, false); queue上的消息才会被清除而且,在当前连
阅读全文
posted @ 2011-08-30 21:56
amityat
摘要:rabbitmq java api 关于消息处理的一个重要的类是channelchannel 主要进行相关定义,发送消息,获取消息,事务处理等。channel可以在多线程中使用,但是在任何时候保证只有一个线程执行命令是很重要的,这在前面 rabbitmq 学习-6-rabbitmq基础 已经说的很清楚了。public interface Channel extends ShutdownNotifier {// 重新得到channel numberint getChannelNumber();//得到当前channel的connectionConnection getConnection()..
阅读全文
posted @ 2011-08-30 21:55
amityat
摘要:1,ChannelbasicPublish() 用来发送消息,接收返回消息是异步的basicGet() 接收一些简单的消息(Retrieving individual messages)basicConsumer() 用来指定一个Consumer去某个queue上去接收订阅的消息(Retrieving messages by subscription)2,RpcClient,RpcServerrabbitmq java client api 提供的进行Rpc样式远程调用的类 ,即实现同步调用,等待返回结果
阅读全文
posted @ 2011-08-30 21:55
amityat
摘要:本身使用RpcClient发送消息与同步接收消息的代码是很简单的,如下: RpcClient client = new RpcClient(channel, exchange, routingKey); String msg = "hello world!"; byte[] result = client.primitiveCall(msg.getBytes()); 这里的primitiveCall调用后,当前线程会进行同步等待,等待消息接收端给自己的回复消息 一个完整的发送消息与接收回复消息的图例: 整个流程详解: l创建RpcClient实例 RpcClient cli
阅读全文
posted @ 2011-08-30 21:54
amityat
摘要:1,bind时候出错 // 定义一个queue,durable(即rabbitmq重启后也不会消失) DeclareOk queueDeclare = channel.queueDeclare("test.queue", true) channel.exchangeDeclare( "test.exchange", "direct"); channel.queueBind("test.queue", "test.exchange", "test.routingkey"); /
阅读全文
摘要:String queue = channel.queueDeclare("test.queue").getQueue(); Rabbitmq Server 会有以下操作: 定义了一个queue,名称为test.queue 把queue的名称(test.queue)作为routingKey,将当前这个queue binding到一个默认的exchange(名称为空,服务器自动创建的)上如果我们 binding的话 channel.queueBind("test.queue", "test.exchange", "test.ro
阅读全文
摘要:What messaging scenarios are supported by AMQP and RabbitMQ? AMQP is a very general system that can be configured to cover a great variety of messaging middleware use-cases. For example: Point-to-point communication One of the simple...
阅读全文
posted @ 2011-08-30 21:51
amityat
摘要:rabbitmq的中文资料真少,和同事lucas经过两周的学习,讨论,测试,终于搞清了部分rabbitmq的知识,先总结一下1,Connection 连接,与rabbitmq server建立的一个连接,由ConnectionFactory创建,虽然创建时指定 了多个server address,但每个connection只与一个物理的server进行连接,此连接是基于Socket进行连接的,这个可以相似的理解为像一个DB Connection。 ConnectionParameters params = new ConnectionParameters(); params.setUse...
阅读全文
posted @ 2011-08-30 21:49
amityat
摘要:RabbitMQ Server Administrator's Guide http://www.rabbitmq.com/admin-guide.html#installation 1, Rabbitmq DB 第一次启动,会检查是否有数据库,没有则创建 一个db,存放在 C:\Documents and Settings\Administrator\Application Data\RabbitMQ,DB会存储关于user,virtual host,持久化消息等信息 此目录下有两个文件夹:db,log 并会使用到这些资源: virtual host:/ user:gu...
阅读全文
posted @ 2011-08-30 21:45
amityat
摘要:RabbitMQ 是一个由 Erlang 写成的 实现,AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR 的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。反正现在这个世道通常都是小公司拥抱标准,大企业自己搞一套标准,不过公开标准总还是对大众有利的。 RabbitMQ 是由 LShift 提供的一个 AMQ...
阅读全文
posted @ 2011-08-30 21:43
amityat
摘要:本例是一个简单的异步发送消息实例1,发送端@Test(groups = { "sunjun" })public class RabbitmqTest { private static Connection connection; static { ConnectionParameters params = new ConnectionParameters(); ConnectionFactory factory = new ConnectionFactory(params); try { connection = factory.newConnection("19
阅读全文
posted @ 2011-08-30 21:42
amityat
摘要:本例是一个简单的异步发送消息实例1,发送端@Test(groups = { "sunjun" })public class RabbitmqTest { private static Connection connection; static { ConnectionParameters params = new ConnectionParameters(); ConnectionFactory factory = new ConnectionFactory(params); try { connection = factory.newConnection("19
阅读全文
posted @ 2011-08-30 21:41
amityat
摘要:Windows1,下载下载erlang:erlang.org下载rabbitmq:http://www.rabbitmq.com/download.html2,安装先安装erlang,C:\Program Files\erl5.7.5设置环境变量:ERLANG_HOME=C:\Program Files\erl5.7.5解压rabbitmq,进入dos下,>cd C:\rabbitmq_server-1.7.2\sbin>rabbitmq-service install3,启动>cd C:\rabbitmq_server-1.7.2\sbin>rabbitmq-serv
阅读全文
posted @ 2011-08-30 21:40
amityat
摘要:AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 AMQP在消息提供者和客户端的行为进行了强制规定,使得不同卖商之间真正实现了互操作能力。 JMS是早期消息中间件进行标准化的一个尝试,它仅仅是在API级进行了规范,离创建互操作能力还差很远。 与JMS不同,AMQP是一个Wire级的协议,它描述了在网络上传输的数据的格式,以字节为流。因此任何遵守此数据格式的工具,其创建和解释消息,都能 与其他兼容工具进...
阅读全文
posted @ 2011-08-30 21:35
amityat
摘要:http://www.infoq.com/cn/articles/AMQP-RabbitMQ准备开始 高级消息队列协议(AMQP1)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS2),AMQP客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器3和客户端可以投入使用4。 相关厂商内容 IBM 360°讲师团招募:每个爱技术乐分享的人都有机会 AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目 标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作
阅读全文
posted @ 2011-08-30 21:34
amityat
浙公网安备 33010602011771号