Android接收RabbitMQ推送过来的消息

来源:互联网 发布:如何查询数据库名称 编辑:程序博客网 时间:2024/05/17 21:51

公司需求使用RabbitMQ来接收推送消息,实现实时推送并实时接收消息,简单记录下

先是导入包 手动下载导入rabbitmq-client.jar

//先是连接服务器  这个方法我自己写在全局 方便各个类调用  private static ConnectionFactory factory = new ConnectionFactory();  public static ConnectionFactory getupConnectionFactory() {    //这些服务器端给你        factory.setHost("192.168.*.*");//连接服务端ip        factory.setPort(****);//端口        factory.setUsername("username");//用户名        factory.setPassword("password");//密码        return factory;    }
//开启消费者线程 subscribe(incomingMessageHandler); /**     * 消费者线程     */    void subscribe(final Handler handler) {        subscribeThread = new Thread(new Runnable() {            @Override            public void run() {            //这里这个循环exit自己定义一个变量 来处理退出程序后停止去通道拿消息,否则会爆出异常            //当断网的时候它会循环去连接通道,直到连接通位置,这里会出现一个问题,如果长时间断网一直去去连接它会不断的创建连接对象,可能会出现内存溢出的情况,自行处理                while (!exit) {                    try {                        Connection connection = factory.newConnection();                        //创建一个通道                        Channel channel = connection.createChannel();                        channel.basicQos(16);                        channel.exchangeDeclare("androidWorkUnit", "fanout");//androidWorkUni这是通道名称,定好后只改这里就行,看去那个通道去取                        String queueName = channel.queueDeclare().getQueue();                        channel.queueBind(queueName, "androidWorkUnit", "");//手动 demo                        //创建消费者                        QueueingConsumer consumer = new QueueingConsumer(channel);                        channel.basicConsume(queueName, true, consumer);                       //相当一个心跳包,实时检测通道里面是否有消息,=有的话取处理 ,进行下面的处理                        while (true) {                            QueueingConsumer.Delivery delivery =      consumer.nextDelivery();                            //获取通道里面的消息 发送handler 自己处理更新UI                            String message = new String(delivery.getBody());                            Log.e("message-->", message);                            Message msg = handler.obtainMessage();                            msg.what = 1;                            Bundle bundle = new Bundle();                            bundle.putString("msg", message);                            msg.setData(bundle);                            handler.sendMessage(msg);                        }                    } catch (InterruptedException e) {                        break;                    } catch (Exception e1) {                        Log.d("", "Connection broken: " + e1.getClass().getName());                        try {                            Thread.sleep(5000); //sleep and then try again                        } catch (InterruptedException e) {                            break;                        }                    }                }            }//            }        });        subscribeThread.start();    }
阅读全文
0 0
原创粉丝点击