作業系統CentOS x86_64 5.4
安裝Erlang
可以到www.erlang.org去下載最新的源碼,編譯安裝。
不過RabbitMQ的官方文檔建議使用yum安裝。
EPEL是啥?
參見http://fedoraproject.org/wiki/EPEL/FAQ#howtouse
安裝步驟:
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
rpm -Uvh epel-release-5-3.noarch.rpm
yum install erlang
安裝RabbitMQ
到 http://www.rabbitmq.com/server.html 下載
rabbitmq-server-1.7.2-1.x86_64.rpm
然後
rpm -ivh rabbitmq-server-1.7.2-1.x86_64.rpm
運行RabbitMQ
/etc/init.d/rabbitmq-server start
注意
RabbitMQ使用了5672連接埠,修改iptables把5672連接埠開啟。
測試
在官網下載java的用戶端rabbitmq-java-client-bin-1.7.2.tar.gz
訊息發布
import com.rabbitmq.client.Channel;<br />import com.rabbitmq.client.Connection;<br />import com.rabbitmq.client.ConnectionFactory;<br />import com.rabbitmq.client.ConnectionParameters;<br />import com.rabbitmq.client.MessageProperties;<br />public class PublishTest {<br />public static void main(String[] args) {<br />try {<br />ConnectionParameters params = new ConnectionParameters();<br />params.setUsername("guest");<br />params.setPassword("guest");<br />params.setVirtualHost("/");<br />params.setRequestedHeartbeat(0);<br />ConnectionFactory factory = new ConnectionFactory(params);<br />Connection conn = factory.newConnection("192.168.56.110", 5672);<br />Channel channel = conn.createChannel();<br />channel.exchangeDeclare("exchange1", "direct", true);<br />channel.queueDeclare("queue1", true);<br />channel.queueBind("queue1", "exchange1", "key1");<br />byte[] messageBodyBytes = "Hello, world!".getBytes();<br />channel.basicPublish("exchange1", "key1", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);<br />channel.close();<br />conn.close();<br />System.out.println("Over.");<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}<br />}
訊息接收
import com.rabbitmq.client.Channel;<br />import com.rabbitmq.client.Connection;<br />import com.rabbitmq.client.ConnectionFactory;<br />import com.rabbitmq.client.ConnectionParameters;<br />import com.rabbitmq.client.GetResponse;<br />public class ConsumerTest {<br />public static void main(String[] args) {<br />try {<br />ConnectionParameters params = new ConnectionParameters();<br />params.setUsername("guest");<br />params.setPassword("guest");<br />params.setVirtualHost("/");<br />params.setRequestedHeartbeat(0);<br />ConnectionFactory factory = new ConnectionFactory(params);<br />Connection conn = factory.newConnection("192.168.56.110", 5672);<br />Channel channel = conn.createChannel();<br />boolean noAck = false;<br />GetResponse response = channel.basicGet("queue1", noAck);<br />if (response == null) {<br />System.out.println("No message!");<br />} else {<br />byte[] body = response.getBody();<br />long deliveryTag = response.getEnvelope().getDeliveryTag();<br />String str = new String(body);<br />System.out.println(str);<br />channel.basicAck(deliveryTag, false); // acknowledge receipt of the message<br />}<br />channel.close();<br />conn.close();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}<br />}