Java实现RabbitMQ以及Jar包的实现

来源:互联网 发布:获取js对象的方法 编辑:程序博客网 时间:2024/06/02 02:44

今天应上级要求,撰写JAVA代码测试RabbitMQ。

以下为环境要求:

RabbitMQ环境不在此电脑,并且无法通讯,需要写完之后打成jar包,运行在另一台主机。开发工具Myeclipse10,JDK1.6,RabbitMQ3.4,所需jar包在www.rabbitmq.com上下载的rabbitmq-java-client-bin-3.6.1。

第一步,建立工程rabbitMQTest,,结构如图所示。所需Jar包放在了lib目录下,

二步,新建class名为,Send.java,来为RabbitMQ测试发送数据。代码如下

package com.mq;import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.MessageProperties;public class Send {    private static final String TASK_QUEUE_NAME = "task_queue";    public static void main(String[] argv) throws java.io.IOException, TimeoutException, InterruptedException {    <span style="white-space:pre"></span>    System.out.println("----------main method is begin----------");    <span style="white-space:pre"></span>    //创建工厂        ConnectionFactory factory = new ConnectionFactory();        System.out.println("----------factory successful!----------");        //设置IP,端口,账户和密码        factory.setHost("192.168.228.87");        factory.setPort(5672);        factory.setUsername("mq");        factory.setPassword("mq");        //创建连接对象        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        System.out.println("----------connected successful!----------");        // 指定队列持久化        channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);        String message = getMessage(argv);        //共发送10万条数据,每隔1S发送1次        int index=0;<span style="white-space:pre"></span>    while (index<100000){<span style="white-space:pre"></span>Thread.sleep(1*1000);<span style="white-space:pre"></span>channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());<span style="white-space:pre"></span>System.out.println(" [x] Sent '" + message + "'");<span style="white-space:pre"></span>index++;<span style="white-space:pre"></span>}        channel.close();        connection.close();    }    private static String getMessage(String[] strings) {        if (strings.length < 1)            return "Hello World!";        return joinStrings(strings, " ");    }    private static String joinStrings(String[] strings, String delimiter) {        int length = strings.length;        if (length == 0)            return "";        StringBuilder words = new StringBuilder(strings[0]);        for (int i = 1; i < length; i++) {            words.append(delimiter).append(strings[i]);        }        return words.toString();    }}
第三步,新建Class名为Recv.java, 来为RabbitMQ测试接收数据。代码如下

package com.mq;import java.io.IOException;import java.util.concurrent.TimeoutException;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Channel;import com.rabbitmq.client.QueueingConsumer;public class Recv {private static final String TASK_QUEUE_NAME = "task_queue";    public static void recv() throws java.io.IOException, java.lang.InterruptedException, TimeoutException {    System.out.print("----------main method is begin----------");        ConnectionFactory factory = new ConnectionFactory();        System.out.println("----------factory successful!----------");        factory.setHost("192.168.228.87");        factory.setPort(5672);        factory.setUsername("mq");        factory.setPassword("mq");        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        System.out.println("----------connected successful!----------");        // 指定队列持久化        channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");        // 指定该线程同时只接收一条消息        channel.basicQos(1);        QueueingConsumer consumer = new QueueingConsumer(channel);        // 打开消息应答机制        channel.basicConsume(TASK_QUEUE_NAME, false, consumer);        while (true) {            QueueingConsumer.Delivery delivery = consumer.nextDelivery();            String message = new String(delivery.getBody());            System.out.println(" [x] Received '" + message + "'");            doWork(message);            System.out.println(" [x] Done");            // 返回接收到消息的确认信息            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);        }    }    private static void doWork(String task) throws InterruptedException {        for (char ch : task.toCharArray()) {            if (ch == '.')                Thread.sleep(1000);        }    }    public static void main(String[] args) throws IOException, InterruptedException, TimeoutException {    recv();}}
最后,打成Jar包,分别为Send.jar和Recv.jar,在下图2的第1步中Send.jar要选Send的main方法,Recv.jar要选Recv的main方法,这里只对Sen.jar贴图:

图1

图2

打好的包,即可在另一台装有rabbitMQ环境和JRE环境中运行,具体使用的命令是:

1 0
原创粉丝点击