java 监听mq消息 底层是用线程实现的吗

Python015

java 监听mq消息 底层是用线程实现的吗,第1张

不是通过线程实现的,它是通过一种注册--通知机制实现的。在java的设计模式中,有一种模式叫:观察者模式,和这个类似。举个例子,本例子是一个简单的监听当数据发生变化时要做的操作。

1,我们先定义一个接口,可以让多个监听者实现<pre t="code" l="java">public interface IDataListen {

public void update(Object event,Object msg)

}2,实现一监听者

<pre t="code" l="java">public class DataListen implements IDataListen{

@Override

public void update(Object event, Object arg) {

// TODO Auto-generated method stub

System.out.println("数据发生了变化")

}

}3,被监听者

<pre t="code" l="java">public class DataManager{

private List<IDataListen>listenList = new ArrayList<>()

public void notifyListen(Object event,Object msg){

for(IDataListen dataListen : listenList){

dataListen.update(null, null)

}

}

public void addListen(IDataListen dataListen){

listenList.add(dataListen)

}

public void updateData(Object msg){

this.notifyListen(null, msg)

}

public static void main(String[] args) {

DataManager dataManager = new DataManager()

IDataListen dataListen1 = new DataListen()

IDataListen dataListen2 = new DataListen()

dataManager.addListen(dataListen1)

dataManager.addListen(dataListen2)

dataManager.updateData("aaa")

}

}main方法里面是监听的应用。这样就可以监听DataManager中的updateData行为了,当有数据发生变化时,就可以即时被监听者收到。

websphere mq : 用于传输信息 具有跨平台的功能。 1 安装websphere mq 并启动 2 websphere mq 建立 queue Manager (如:MQSI_SAMPLE_QM) 3 建立queue 类型选择 Local类型 的 (如lq ) 3 建立channels 类型选择Server Connection (如BridgeChan...

{

//前面是准备管理器和队列

MQQueueManager qMgr = new MQQueueManager(qManager)

int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT | MQConstants.MQOO_INQUIRE

MQQueue queue = qMgr.accessQueue(qName, openOptions)

MQMessage rcvMessage = new MQMessage()

MQGetMessageOptions gmo = new MQGetMessageOptions()

gmo.options = gmo.options + MQConstants.MQGMO_WAIT + MQConstants.MQGMO_SYNCPOINT

//读取五秒超时,这里目的是要有个读取阻塞,和Socket编程类似。

gmo.waitInterval = 5000

queue.get(rcvMessage, gmo)

//后面就是操作消息的部分【略】

}catch(Exception e){{

//前面是准备管理器和队列

MQQueueManager qMgr = new MQQueueManager(qManager)

int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT | MQConstants.MQOO_INQUIRE

MQQueue queue = qMgr.accessQueue(qName, openOptions)

MQMessage rcvMessage = new MQMessage()

MQGetMessageOptions gmo = new MQGetMessageOptions()

gmo.options = gmo.options + MQConstants.MQGMO_WAIT + MQConstants.MQGMO_SYNCPOINT

//读取五秒超时,这里目的是要有个读取阻塞,和Socket编程类似。

gmo.waitInterval = 5000

queue.get(rcvMessage, gmo)

//后面就是操作消息的部分【略】

}catch(Exception e){