RabbitMQ 安卓 一分鐘了完成 java用戶端與android接收端的訊息推送,rabbitmqandroid
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
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。 //blog.csdn.net/mr_jianrong/article/details/72875297