中文JAVA技術(shù)平等自由協(xié)作創(chuàng)造

          Java專題文章博客和開(kāi)源

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          Java獲取php端放入rabbitmq內(nèi)的消息

            背景:項(xiàng)目中一個(gè)場(chǎng)景需要用java端的處理代碼獲取php端放到rabbitmq內(nèi)的消息,然后做相應(yīng)業(yè)務(wù)的處理。

            前提:rabbitmq服務(wù)器已經(jīng)搭建好,php端的消息發(fā)布正常運(yùn)行。

            首先:下載rabbitmq-client對(duì)應(yīng)的java版jar包(spring好像有相應(yīng)的支持)

            開(kāi)始代碼coding的工作,上代碼

            package com.eelly.imagesearch.common;

            import com.rabbitmq.client.Channel;

            import com.rabbitmq.client.Connection;

            import com.rabbitmq.client.ConnectionFactory;

            import com.rabbitmq.client.GetResponse;

            public class RabbitMqControll {

            /**

            * 讀取RabbitMq中的存儲(chǔ)信息

            *

            * @param queue_name 隊(duì)列名

            * @param exchange_name 交換機(jī)名

            * @param route_key 綁定用到的route_key

            * @param durable 是否持久化

            */

            public void readRabbitMqInfo (String queue_name,

            String exchange_name, String route_key, boolean durable)

            {

            ConnectionFactory factory = new ConnectionFactory();

            // 設(shè)置服務(wù)器ip

            factory.setHost("172.18.107.66");

            // 設(shè)置rabbitmq服務(wù)器運(yùn)行的端口

            factory.setPort(5672);

            // 設(shè)置rabbitmq服務(wù)器連接用戶

            factory.setUsername("guest");

            // 設(shè)置rabbitmq服務(wù)器連接用戶密碼

            factory.setPassword("guest");

            // 設(shè)置rabbitmq服務(wù)器節(jié)點(diǎn)目錄(個(gè)人理解)

            factory.setVirtualHost("/");

            try {

            // 創(chuàng)建工廠連接

            Connection connection = factory.newConnection();

            // 創(chuàng)建通道

            Channel channel = connection.createChannel();

            // 聲明交換機(jī)(設(shè)置相關(guān)屬性時(shí)需要和php端的一致)

            channel.exchangeDeclare(exchange_name, "direct", durable);

            // 聲明消息隊(duì)列(設(shè)置相關(guān)屬性時(shí)需要和php端的一致)

            channel.queueDeclare(queue_name, durable, false, true, null);

            // 綁定消息隊(duì)列(設(shè)置相關(guān)屬性時(shí)需要和php端的一致)

            channel.queueBind(queue_name, exchange_name, route_key);

            System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

            // basicConsume消費(fèi)模式

            /*channel.basicQos(1);//消息分發(fā)處理

            QueueingConsumer consumer = new QueueingConsumer(channel);

            channel.basicConsume(queue_name, false, consumer);

            while (true) {

            QueueingConsumer.Delivery delivery = consumer.nextDelivery();

            String message = new String(delivery.getBody());

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

            // 提交消息處理完成回復(fù)

            channel.basicAck(delivery.getEnvelope()。getDeliveryTag(), false);

            }*/

            // basicGet消費(fèi)模式

            while (true)

            {

            // get方式主動(dòng)消費(fèi)

            GetResponse res=channel.basicGet(queue_name, false);

            if (res != null && res.getMessageCount() >= 0)

            {

            System.out.println(res.getMessageCount());

            String message = "";

            message = new String(res.getBody());

            channel.basicAck(res.getEnvelope()。getDeliveryTag(), false);

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

            }

            else

            {

            System.out.println("消息隊(duì)列中沒(méi)有可消費(fèi)的信息!");

            break;

            }

            }

            channel.close();

            connection.close();

            } catch (Exception e) {

            e.printStackTrace();

            }

            }

            }

            在開(kāi)發(fā)的過(guò)程中,主要報(bào)的異常是:

            1.創(chuàng)建交換機(jī)和消息隊(duì)列時(shí),設(shè)置的屬性和消息產(chǎn)生端的php代碼設(shè)置的不一樣,導(dǎo)致不匹配和一直重寫(xiě)屬性

            2.在調(diào)用時(shí)一直沒(méi)有確定到底是用basicConsume的消費(fèi)模式還是basicGet消費(fèi)模式(前者帶有監(jiān)控效果,后者沒(méi)有,不知道是不是因?yàn)橐徽哂刑鰓hile循環(huán),一者沒(méi)有的原因)托福改分

          posted on 2014-01-02 15:33 好不容易 閱讀(266) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          PK10開(kāi)獎(jiǎng) PK10開(kāi)獎(jiǎng)
          主站蜘蛛池模板: 涞源县| 芒康县| 万全县| 始兴县| 塘沽区| 嘉黎县| 苍山县| 新巴尔虎右旗| 祁连县| 绥芬河市| 兴宁市| 洱源县| 敖汉旗| 克什克腾旗| 沈丘县| 五莲县| 炎陵县| 花垣县| 松滋市| 呼玛县| 瑞丽市| 乐业县| 敦化市| 北宁市| 额敏县| 玉山县| 准格尔旗| 嵩明县| 营口市| 乐昌市| 葵青区| 长汀县| 北流市| 新源县| 安国市| 高密市| 宁远县| 郴州市| 阳西县| 洪雅县| 慈利县|