RabbitMq(二)

来源:互联网 发布:网络歌手戴丽丽的经历 编辑:程序博客网 时间:2024/06/17 05:58

在这里我将用java来简单的实现rabbitMQ。

大概思路是这样的:发送端发送消息到队列,服务端接收消息。
1. 所需依赖

<dependency>            <groupId>com.rabbitmq</groupId>            <artifactId>amqp-client</artifactId>            <version>4.1.0</version>        </dependency>

直接在maven中加入依赖就可以
2. 发送端代码

package baseDemo;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;import java.util.Scanner;import java.util.concurrent.TimeoutException;/** * Created by pxc on 2017/6/27. */public class Send {    //队列名称    private final static String QUEUE_NAME = "hello";    public static void main(String[] args) {        /**         * 创建连接MabbitMQ         */        ConnectionFactory factory = new ConnectionFactory();        //设置MabbitMQ所在主机ip或者主机名        factory.setHost("localhost");        //创建一个连接        Connection connection = null;        try {            connection = factory.newConnection();            //创建一个频道            Channel channel = connection.createChannel();            //指定一个队列            channel.queueDeclare(QUEUE_NAME, false, false, false, null);            String message = "hello world!";            while (!message.equals("0")){                Scanner scanner = new Scanner(System.in);                System.out.print("请输入要发送的消息:");                message = scanner.nextLine();                //往队列中发出一条消息                channel.basicPublish("", QUEUE_NAME, null, message.getBytes());                System.out.println(" [x] Sent '" + message + "'");            }            //发送的消息            //关闭频道和连接            channel.close();            connection.close();        } catch (IOException e) {            e.printStackTrace();        } catch (TimeoutException e) {            e.printStackTrace();        }    }}

注意要启动mq服务
3. 接收端代码

package baseDemo;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.QueueingConsumer;import java.io.IOException;import java.util.concurrent.TimeoutException;/** * Created by pxc on 2017/6/27. */public class Receive {    //队列名称    private final static String QUEUE_NAME = "hello";    public static void main(String[] argv) {        //打开连接和创建频道,与发送端一样        ConnectionFactory factory = new ConnectionFactory();        factory.setHost("localhost");        Connection connection = null;        try {            connection = factory.newConnection();            Channel channel = connection.createChannel();            //声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。            channel.queueDeclare(QUEUE_NAME, false, false, false, null);            System.out.println(" [*] Waiting for messages. To exit press CTRL+C");            //创建队列消费者            QueueingConsumer consumer = new QueueingConsumer(channel);            //指定消费队列            channel.basicConsume(QUEUE_NAME, true, consumer);            while (true) {                //nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)                QueueingConsumer.Delivery delivery = null;                delivery = consumer.nextDelivery();                String message = new String(delivery.getBody());                System.out.println(" [x] Received '" + message + "'");            }        } catch (IOException e) {            e.printStackTrace();        } catch (TimeoutException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

注意: 运行前先要先启动rabbitMq服务

原创粉丝点击