这里记录下ruby下AMQP的使用,支持AMQP的开源broker比较多,比较有名的是ActiveMQ, 是Apache下的一个项目,这里采用的是RabbitMQ, RabbitMQ是Erlang写的,因为Erlang对高并发的支持非常擅长,因此RabbitMQ的表现自然也不逊色,平台这里采用的是Debian, 在安装Rabbit之前首先要安装Erlang, 之前有些过一片关于Erlang安装的文章, Debian上使用apt安装就OK了,这里就不多说了, 安装完后RabbitMQ将会自动建立一个域,测试账户和密码test,然后通过
/etc/init.d/rabbitmq-server start
启动就行了, 可以随时查看/var/log/rabbitmq下的日志查看运行状况
这里采用的ruby接口库就是amqp, 可以通过gem直接安装
发送脚本, producer.rb:
%w{rubygems amqp mq}.each { |b| require b } MQ_SERVER = '192.168.0.113' MQ_PORT = 5672 MQ_USER = 'guest' MQ_PWD = 'guest' begin EM.run { conn = AMQP.connect(:host => MQ_SERVER, :port => MQ_PORT, :user => MQ_USER, :pass => MQ_PWD) channel = mp_conn = MQ.new(conn) channel.queue('mp_queue').publish(Marshal.dump(['mp', '', '13718781273', 'hello, shitou'])) conn.close } rescue AMQP::Error end
接收的脚本,consumer.rb:
%w{rubygems amqp mq net/http uri active_record}.each { |b| require b } MQ_SERVER = '192.168.0.113' MQ_PORT = 5672 MQ_USER = 'guest' MQ_PWD = 'guest' EM.run { conn = AMQP.connect(:host => MQ_SERVER, :port => MQ_PORT, :user => MQ_USER, :pass => MQ_PWD) channel = mp_conn = MQ.new(conn) queue = MQ::Queue.new(channel, 'mp_queue') #mp_queue is the queue we defined queue.subscribe do |header, msg| data = Marshal.load(msg) mobilephone, text = data[2], data[3] puts "send to NO.: #{mobilephone}, #{text}" end #mp.publish(Marshal.dump('hello shitou')) #conn.close { EM.stop_event_loop } #AMQP.stop { EM.stop } }
2009-01-21 17:28:03, 1195 reviews
send to mailbox
just DO NOT support IE