RabbitMQ实现‘Hello world’

      rabbit官网入门教程: http://www.rabbitmq.com/getstarted.html

  github完整代码:https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/java

  API说明:http://www.rabbitmq.com/releases/rabbitmq-java-client/current-javadoc/

  RabbitMQ的作用就是中间件,实现客户端和业务服务器的解耦;服务器接收到请求后将参数传入rabbitmq后即刻返回成功,消费者再去真正的处理业务逻辑。

   因为rabbitmq实现的是生产者消费者模型, 所有可能出现数据满(包括内存和硬盘)的情况,这时无法发送消息。详见:http://www.rabbitmq.com/releases/rabbitmq-java-client/current-javadoc/


  按照文档一步步操作即可, web页面可以直观的监测rabbitmq实时数据.

  新建一个java工程, 并添加maven。


    添加对rabbitmq的依赖。


    参考http://www.rabbitmq.com/tutorials/tutorial-one-java.html编写代码:

public class Consumer {
    public final static String QUEUE_NAME = "rabbitmq.demo";

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection 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");
        com.rabbitmq.client.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(" [x] Received '" + message + "'");
            }
        };
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}
public class Productor {
    public final static String QUEUE_NAME = "rabbitmq.demo";

    public static void main(String[] args) throws IOException, TimeoutException{
        ConnectionFactory factory = new ConnectionFactory();

        //配置连接,包括连接上限阈值、ip、端口,用户名、密码、异常回调,超时时间等等
        factory.setHost("localhost");   //本机要安装RabbitMQ并启动服务

        //创建一个TCP连接, 每个连接上可以有若干个channel(即共享同一个连接);生产者和消费者通过channel通讯,避免tcp连接总数的限制
        Connection connection = factory.newConnection();

        //创建通道
        Channel channel = connection.createChannel();  //新建一个通道
        /**
         *  第一个参数表示队列名称
         *  第二个参数为是否持久化(true表示是,队列将在服务器重启时保存)
         *  第三个参数为是否是独占队列(创建者可以使用的私有队列,断开后自动删除)
         *  第四个参数为当所有消费者客户端连接断开时是否自动删除队列
         *  第五个参数为队列的其他参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        //发生消息到队列
        String message = "Hello world";
        /**
         * 第一个参数为转发器名称
         * 第二个参数为队列映射的路由key
         * 第三个参数为消息的其他属性
         * 第四个参数为发送信息的主体
         */
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

        System.out.println(" [x] Sent '" + message + "'");

        //释放资源
        channel.close();
        connection.close();
    }
}

    打开rabbitmq服务后运行demo, 可以看出rabbitmq其实就是生产者消费者模式;  Rabbitmq通过exchange分发器、queue队列名称和路由rootingkey等3种方式完成任务分发。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值