使用RabbitMQ简单发送接收消息

来源:互联网 发布:淘宝自助开通账户 编辑:程序博客网 时间:2024/05/16 17:14

参考:http://blog.csdn.net/lmj623565791/article/details/37607165

            http://blog.csdn.net/anzhsoft/article/details/19563091

            http://www.rabbitmq.com/tutorials/tutorial-one-java.html



举个例子,假如你想投递一封邮件,你可以将邮件投递到某个邮箱,然后邮递员从邮箱中获取邮件,并将邮件交付到接收方,在这个过程中,RabbitMQ就 类似于邮箱 、邮局和邮递员,RabbitMQ是一个消息队列,它可以接收程序发送的消息,然后放入到相应的消息队列中,另外一些程序可以从消息队列中获取数据,以此完成程序之间的通信.

下面介绍一些概念:


1、生产者:程序中,发送消息的一方称为生产者

2、消息队列:用来存储生产者发送的消息

3、消费者:从消息队列中获取消息的一方称为消费者






4、Connection

Connection是一个TCP连接,消费者和生产者通过TCP连接到RabbitMQ server


5.Channel

channel建立在Conection之上,因为频繁建立关闭TCP连接会影响到性能,因此使用Channel发送、接收消息

通过channel的queueDeclare()方法可以指定要发送消息/接收消息的队列

通过channel的basicPublic()方法可以向队列中发送消息


下面是一个简单的例子,Sender向消息队列中发送消息,Receiver从消息队列中获取消息


1.创建一个发送者类

package com.rabbit.test1;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;/** * RabbitMQ发送消息 * Sender */public class Sender {    //队列名称      private final static String QUEUE_NAME = "queue-test";    public static void main(String[] argv) throws java.io.IOException {        //1.创建一个ConnectionFactory连接工厂connectionFactory        ConnectionFactory connectionFactory = new ConnectionFactory();        //2.通过connectionFactory设置RabbitMQ所在IP等信息        connectionFactory.setHost("localhost");        //      connectionFactory.setPort(5762); //指定端口        //      connectionFactory.setUsername("admin");//用户名        //      connectionFactory.setPassword("admin");//密码        //3.通过connectionFactory创建一个连接connection        Connection connection = connectionFactory.newConnection();        //4.通过connection创建一个频道channel        Channel channel = connection.createChannel();        //5.通过channel指定一个队列        channel.queueDeclare(QUEUE_NAME, false, false, false, null);        //发送的消息          String message = "hello world!";        //6.通过channel向队列中添加消息        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());        System.out.println("向" + QUEUE_NAME + "中添加了一条消息:" + message);        //7.关闭频道        channel.close();        //8.关闭连接        connection.close();    }}


2.接收者

package com.rabbit.test1;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.QueueingConsumer;import com.rabbitmq.client.QueueingConsumer.Delivery;/** * RabbitMQ接收消息 * Receiver * */public class Receiver {    //队列名称      private final static String QUEUE_NAME = "queue-test";    public static void main(String[] argv) throws java.io.IOException, java.lang.InterruptedException {        //1.创建一个ConnectionFactory连接工厂connectionFactory        ConnectionFactory connectionFactory = new ConnectionFactory();        //2.通过connectionFactory设置RabbitMQ所在IP等信息        connectionFactory.setHost("localhost");        //3.通过connectionFactory创建一个连接connection        Connection connection = connectionFactory.newConnection();        //4.通过connection创建一个频道channel        Channel channel = connection.createChannel();        //5.通过channel指定队列        channel.queueDeclare(QUEUE_NAME, false, false, false, null);        //与发送消息不同的地方        //6.创建一个消费者队列consumer,并指定channel          QueueingConsumer consumer = new QueueingConsumer(channel);        //7.为channel指定消费者        channel.basicConsume(QUEUE_NAME, true, consumer);        while (true) {            //从consumer中获取队列中的消息,nextDelivery是一个阻塞方法,如果队列中无内容,则等待            Delivery delivery = consumer.nextDelivery();            String message = new String(delivery.getBody());            System.out.println("接收到了" + QUEUE_NAME + "中的消息:" + message);        }    }}


3.启动Sender,向消息队列中添加信息


访问RabbitMQ的管理界面,可以看到自动创建了一个queue-test的队列,并且有一条消息


启动Reciever,可以看到接收者从消息队列中获取了消息并打印在控制台



0 0
原创粉丝点击