Java使用rabbitmq的一个简单例子

先要设置为用户在web管理页面中设置set permission,如若不,不能连接
消费端代码:

package test;


import com.rabbitmq.client.*;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * Created by alber on 2017/1/9.
 */
public class MyConsumer {
    @Test
    public void test() throws IOException, TimeoutException {
        String QUEUE_NAME = "hello";
        ConnectionFactory factory = new ConnectionFactory();
//      设置RabbitMQ地址
        factory.setHost("192.168.134.129");
        factory.setUsername("admin");
        factory.setPassword("admin123");
//      创建一个新的连接
        Connection connection = factory.newConnection();
//      创建一个频道
        Channel channel = connection.createChannel();
//      声明要关注的队列 -- 在RabbitMQ中,队列声明是幂等性的(一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同),也就是说,如果不存在,就创建,如果存在,不会对已经存在的队列产生任何影响。
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println("C [*] Waiting for messages. To exit press CTRL+C");
//      DefaultConsumer类实现了Consumer接口,通过传入一个频道,告诉服务器我们需要那个频道的消息,如果频道中有消息,就会执行回调函数handleDelivery

        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("C [x] Received '" + message + "'");
            }
        };
//      自动回复队列应答

        channel.basicConsume(QUEUE_NAME, true, consumer);
        System.in.read();
    }


}

生产端代码:

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.junit.Test;

import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.TimeoutException;

/**
 * Created by alber on 2017/1/9.
 */
public class MyProducer {
    @Test
    public void test() throws IOException, TimeoutException {
        String QUEUE_NAME = "hello";
        ConnectionFactory factory = new ConnectionFactory();
//      设置RabbitMQ地址
        factory.setHost("192.168.134.129");
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("admin123");
//      创建一个新的连接
        Connection connection = factory.newConnection();
//      创建一个频道
        Channel channel = connection.createChannel();
//      声明一个队列 -- 在RabbitMQ中,队列声明是幂等性的(一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同),也就是说,如果不存在,就创建,如果存在,不会对已经存在的队列产生任何影响。
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "Hello World!";
//      发送消息到队列中
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
        System.out.println("P [x] Sent '" + message + "'");
//      关闭频道和连接
        channel.close();
        connection.close();

    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,313评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,409评论 25 709
  • 今天回家,娃们大声唱起生日歌,歌词如下: 祝你生日快乐 祝你蛋糕发霉 祝你洗澡没水 祝你电灯没电 00后真是不可小...
    无花岛主夫人阅读 4,415评论 0 0
  • 累。今天走了10000步。给儿子买衣服,买书,去游乐场。和老公一起。一家三口。还是很开心的。 吃了好吃的,买了书,...
    很显瘦阅读 128评论 0 0
  • 去年,《釜山行》大火了一把。 有个人就推荐给自己的朋友看, 这位朋友过了几天打电话来问:你不是说这片打丧尸嘛,我看...
    小马过河不要桥阅读 514评论 2 1

友情链接更多精彩内容