您的位置:首页 > 移动开发 > Android开发

RabbitMQ 安卓 一分钟了完成 java客户端与android接收端的消息推送

2017-06-06 10:13 489 查看
RabbitMQ 是一个消息代理。这主要的原理十分简单,就是通过接受和转发消息。RabbitMQ不处理文件,而是接受,并存储和以二进制形式将消息转发。在消息的传送过程中,我们使用一些标准称呼:发送消息的程序就是一个生产者,我们使用“P”来描述它;接收消息的程序是消费者,消费过程与接收相似,一个消费者通常是一个等着接受消息的程序,我们使用"C"来描述。来源:http://blog.csdn.net/a704755096/article/details/45969717

Java 客户端库 RabbitMQ 遵循AMQP协议,那是一个开放的,并且通用的消息协议。接下来看下java Android RabbitMQ怎么发送和接收消息:

发送端:生产者

[java] view
plain copy

package com.lenovo.app.mq;  

import com.rabbitmq.client.ConnectionFactory;  

import com.rabbitmq.client.Connection;  

import com.rabbitmq.client.Channel;  

public class SendDirect{    

    private final static String QUEUE_NAME = "queue"; //队列名称     

    

    public static void main(String[] arg) throws java.io.IOException{    

        //1.连接MabbitMQ所在主机ip或者主机名    

        ConnectionFactory factory = new ConnectionFactory();    

        factory.setHost("localhost");    

        //factory.setHost("110.80.10.26");  

        //factory.setPort(5672);   

        //factory.setUsername("123");  

        //factory.setPassword("123");  

        //创建一个连接   创建一个频道    

        Connection connection = factory.newConnection();    

        Channel channel = connection.createChannel();    

        //2.指定一个队列    

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);    

          

        String message = "hello world";    

        //3.往队列中发出一条消息    

        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());    

        System.out.println("[Send]" + message );    

        //4.关闭频道和连接    

        channel.close();    

        connection.close();    

     }    

}   

接收端:消费者

[java] view
plain copy

package com.lenovo.app.mq;  

import com.rabbitmq.client.ConnectionFactory;  

import com.rabbitmq.client.Connection;  

import com.rabbitmq.client.Channel;  

import com.rabbitmq.client.QueueingConsumer;  

public class ReceiveDirect{    

        private final static String QUEUE_NAME = "queue";//队列名称      

          

        public static void main(String[] arg) throws java.io.IOException,    

                java.lang.InterruptedException{    

            //1.打开连接和创建频道,与发送端一样    

            ConnectionFactory factory = new ConnectionFactory();    

            factory.setHost("localhost");factory.setRequestedHeartbeat(2);//是否断网  

            //factory.setHost("110.80.10.26");    

            //factory.setPort(5672);    

            //factory.setUsername("123");  

            //factory.setPassword("123");  

            //创建一个连接   创建一个频道    

            Connection connection = factory.newConnection();    

            Channel channel = connection.createChannel();    

            //2.声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。    

            channel.queueDeclare(QUEUE_NAME, false, false, false, null);    

            System.out.println("Waiting for messages……");    

                

            //3.创建队列消费者    

            QueueingConsumer consumer = new QueueingConsumer(channel);    

            channel.basicConsume(QUEUE_NAME, true, consumer);//指定消费队列      

            while (true){    

             //4.开启nextDelivery阻塞方法(内部实现其实是阻塞队列的take方法)    

             QueueingConsumer.Delivery delivery = consumer.nextDelivery();    

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

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

            }    

        

        }    

}   

关闭连接

[java] view
plain copy

private void closeConn(){   

                if(connection!=null&&connection.isOpen()){  

                    try {  

                    connection.close();  

                    } catch (IOException e) {  

                    e.printStackTrace();  

                    }  

                }  

                isConnect=false;  

            }  

注意:Android网络连接耗时操作需要在子线程中。RabbitMQ client jar包下载地址:http://download.csdn.net/download/a704755096/9613612
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息