shiningray.cn
域名年龄: 16年6个月21天HTTP/1.1 200 OK 服务器:nginx/1.4.6 (Ubuntu) 访问时间:2014年11月20日 03:51:10 类型:text/html; charset=UTF-8 文件大小:42024 连接:keep-alive 语言环境:PHP/5.5.9-1ubuntu4 动作:Accept-Encoding,Cookie 缓存控制:max-age=3,必须更新 WP-Super-Cache: Served supercache file from PHP Content-Encoding: gzip 修改日期:2014年11月19日 00:55:34 网站编码:UTF-8
Shining Ray一缕阳光菜单跳至内容首页关于我简历存档文档Mnesia——针对电信应用的健壮分布式DBMSObjective CAML系列教程基础知识程序的结构数据类型和匹配空指针、断言和警告函数式编程OCaml模块If语句、循环和迭代Self:简洁的威力克隆的反攻玩具javascript 正则表达式测试器JS MinifierSmart PinYin SlugURL/Base64/Hex Encoder & Decoder时间戳转换工具RabbitMQ简介1条回复RabbitMQ是一个很受欢迎的消息中间件,通过它可以很方便地实现异构子系统之间的通讯,还可以将不同子系统之间进行解耦。它用erlang开发,基本上是实现了AMQP 1.0标准的消息协议。了解RabbitMQ首先要了解以下一些概念:Message,Producer、Exchange、Queue、ConsumerMessage是一些简单的字符串, Producer(Publisher)是实际发布消息的角色Queue,是实际存放消息的地方。顾名思义,消息从Queue一端放入,另一段由Consumer(Subscriber)取出,如果有多Consumer,每个consumer各自取出不同的消息进行处理。当Producer发布消息的时候,首先是发布到Exchange,然后RabbitMQ根据Exchange的类型和逻辑来判断应该发送到哪个Queue中。所以Queue必须bind到特定的Exchange上才能获取到消息,绑定的时候可以提供一个routing_key来判断选择什么消息,Publisher在发出信息的时候就可以指定不同的routing_key来选择如何分发消息。当使用最基本的队列模式的时候,可以不指定exchange,这时候会使用默认exchange来进行消息的发送。Exchange和Queue都有自己的名字,多个Publisher可以发布到同一个Exchange,多个Consumer也可以订阅到同一个Queue。RabbitMQ支持的Exchange方式有:direct 直接投递fanout 广播投递topic 可以按照一个topic名字的模式进行匹配routing_key,例如topic.*可以匹配topic.paragraph和topic.paragraph.word,而topic.#rpc Producer可以等待Consumer处理消息结束并把结果返回给ProducerRuby下可以使用基于EventMachine的异步客户端amqp,或者是同步模式的bunny和carrot。用bunny,以topic订阅为例:publisher部分:Ruby#!/usr/bin/env ruby# encoding: utf-8require "bunny"conn = Bunny.newconn.startch = conn.create_channelx = ch.topic("topic_logs")severity = ARGV.shift || "anonymous.info"msg = ARGV.empty? ? "Hello World!" : ARGV.join(" ")x.publish(msg, :routing_key => severity)puts " [x] Sent #{severity}:#{msg}"conn.close1234567891011121314151617#!/usr/bin/env ruby# encoding: utf-8 require "bunny" conn = Bunny.newconn.start ch = conn.create_channelx = ch.topic("topic_logs")severity = ARGV.shift || "anonymous.info"msg = ARGV.empty? ? "Hello World!" : ARGV.join(" ") x.publish(msg, :routing_key => severity)puts " [x] Sent #{severity}:#{msg}" conn.closeconsumer部分Ruby#!/usr/bin/env ruby# encoding: utf-8require "bunny"if ARGV.empty?abort "Usage: #{$0} [binding key]"endconn = Bunny.newconn.startch = conn.create_channelx = ch.topic("topic_logs")q = ch.queue("", :exclusive => true)ARGV.each do |severity|q.bind(x, :routing_key => severity)endputs " [*] Waiting for logs. To exit press CTRL+C"beginq.subscribe(:block => true) do |delivery_info, properties, body|puts " [x] #{delivery_info.routing_key}:#{body}"endrescue Interrupt => _ch.closeconn.closeend123456789101112131415161718192021222324252627282930#!/usr/bin/env ruby# encoding: utf-8 require "bunny" if ARGV.empty? abort "Usage: #{$0} [binding key]"end conn = Bunny.newconn.start ch = conn.create_channelx = ch.topic("topic_logs")q = ch.queue("", :exclusive => true) ARGV.each do |severity| q.bind(x, :routing_key => severity)end puts " [*] Waiting for logs. To exit press CTRL+C" begin q.subscribe(:block => true) do |delivery_info, properties, body| puts " [x] #{delivery_info.routing_key}:#{body}" endrescue Interrupt => _ ch.close conn.closeendRabbitMQ集群和High Scalability由于RabbitMQ实现的是AMQP,它非常强调一致性,而AMQP本身就是一种适用于金融行业的消息协议。根据CAP原理,一
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2024-05-29 07:07, Process in 0.0106 second.