android中的MQ使用

MQ对于刚刚接触并且不懂的我 是那么的陌生,一搜这个关键词 只有ActiveMQ,这个东西,哎,因为专业术语的介绍这个东西真的还不如不介绍,这里借用ActivitMQ简单介绍这篇博客中的一段话的介绍吧。


1、首先ActiveMQ是什么东西?

答:ActiveMQ是一个易于使用的消息中间件。

2、消息中间件是什么?

答:相当于用于专递消息或数据的管子。


3、消息中间件有很多的用途和优点有? 

(1). 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外一个模块; 
(2). 负责建立网络通信的通道,进行数据的可靠传送。 
(3). 保证数据不重发,不丢失 
(4). 能够实现跨平台操作,能够为不同操作系统上的软件集成技工数据传送服务


4、MQ是什么?

首先简单的介绍一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送。(这是个长链喔,长链是什么不懂的就自己看着办了)。


 ZeroMQ的使用

zeroMQ是一个开源的MQ,也比较好用, github地址。可能有些人觉得奇怪名字不是zeroMQ,但是人家开头就写了zeroMQ了,虽然名字不是zeromq(废话结束)。


找啊找啊找,额,这个开源并没有提供给我们gradle依赖,蛋疼,不过我们按下图这样搜一下看有没有,在android studio file打开:








恩,还是有的,添加了gradle依赖后就是使用了。


怎么去使用我们已经依赖好了的开源呢?使用和搭建也是参考按这篇博客来的 点击打开链接,我这里整理了下:

(1)服务端(publisher):

package pubsub;  
  
  
import org.zeromq.ZMQ;  
  
public class Publisher {  
    public static void main(String args[]) {  
      
        ZMQ.Context context = ZMQ.context(1);  //创创建包含一个I/O线程的context  
        ZMQ.Socket publisher = context.socket(ZMQ.PUB);   //创建一个publisher类型的socket,他可以向所有订阅的subscriber广播数据  
          
        publisher.bind("tcp://*:5555");  //将当前publisher绑定到5555端口上,可以接受subscriber的订阅  
          
        while (!Thread.currentThread ().isInterrupted ()) {  
            String message = "fjs hello";  //最开始可以理解为pub的channel,subscribe需要订阅fjs这个channel才能接收到消息  
            publisher.send(message.getBytes());  
        }  
  
        publisher.close();  
        context.term();  
    }  
}  




这里publisher来充当服务端,所有的subscriber都需要建立于publisher的连接



(2)客户端(subscriber)代码:


//在需要接收数据的类或方法里接收,相当于广播了 
for (int j = 0; j < 100; j++) {  
//耗时操作,当然要开启线程
            new Thread(new Runnable(){  
  
                public void run() {  
                    // TODO Auto-generated method stub  
                    ZMQ.Context context = ZMQ.context(1);  //创建1个I/O线程的上下文  
                    ZMQ.Socket subscriber = context.socket(ZMQ.SUB);     //创建一个sub类型,也就是subscriber类型的socket  
                    subscriber.connect("tcp://127.0.0.1:5555");    //与在5555端口监听的publisher建立连接  
                    subscriber.subscribe("fjs".getBytes());     //订阅fjs这个channel  
                      
                    for (int i = 0; i < 100; i++) {  
                        byte[] message = subscriber.recv();  //接收publisher发送过来的消息  
                        System.out.println("receive : " + new String(message));  
                    }  
                    subscriber.close();  
                    context.term();  
                }  
                  
            }).start();  
        }  






这里需要注意订阅的channel问题,如果这里错了的话,是不会受到后台publisher发送过来的数据的

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值