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发送过来的数据的