导航:首页 > 编程语言 > javamq队列

javamq队列

发布时间:2022-08-24 08:15:39

1. 用java接口怎么取MQ队列深度

不知道用的是什么Mq框架,如果是IBM的mq,应该可以通过MQMannager的getTotalMessageLength,getMessageLength获取

2. Java 开源消息队列ActiveMQ等

你这个Queue是一个在内存里的数据结构类,提供了入队出队方法。实例化以后可以使用。

MessageQueue是一个Java的协议,是基于标准的,ActiveMQ是这个协议标准的具体实现。这个队列具有MessageQueue的通用功能,例如支持:发布者-订阅者,点到点的多种方式。用于SOA的大型分布式环境,12306抢票的时候你看见有多少人排队等待,就是使用的这个。

12306的后台服务器是分布式的,比如接受订票功能有100台服务器,一个LinkedBlockingQueue的范围只是一台机器,这样的话就会出现多个队,而且功能单一。这时候就会把订票请求发送给MessageQueue ,这个东西是分布式、异步的。。。。是完全不同的两个东西,没有可比性

3. mq java 怎么判断队列为空

MQException
该类包含WebSphere MQ 完成代码和错误代码常量的定义。以MQCC_开始的常量是WebSphere MQ 完成代码,而以MQRC_开始的常量则是WebSphere MQ 原因代码。只要出现WebSphere MQ
错误,就会给出MQException。
MQGetMessageOptions
该类包含控制MQQueue.get()方法行为的选项。
MQManagedObject
该类是MQQueueManager、MQQueue 和MQProcess 类的超类。它提供查询并设置这些资源属性的能力。

------解决方案--------------------
去取一次,得到 2033 错误就是没有消息符合你的条件。

使用 PCF 查询队列资料:

/**
* @return current depth of queue connected currently.
* @throws Exception
*/
public QueueInfo queryQueueInfo() throws Exception {
if (!checkStatus2(this.queueManager)) {
throw new IllegalStateException("Not Connected to queue manager.");
}

PCFMessageAgent agent = null;

try {
agent = new PCFMessageAgent(this.queueManager);

// Inquiry Queue Name & Current Depth.
int[] attrs = {
CMQC.MQCA_Q_NAME, CMQC.MQIA_CURRENT_Q_DEPTH,
CMQC.MQIA_OPEN_INPUT_COUNT, CMQC.MQIA_OPEN_OUTPUT_COUNT,
CMQC.MQIA_Q_TYPE, CMQC.MQIA_DEFINITION_TYPE, CMQC.MQIA_INHIBIT_GET,
CMQC.MQIA_INHIBIT_PUT };

PCFParameter[] parameters = {
new MQCFST(CMQC.MQCA_Q_NAME , getInputQueue().getText().trim()),
new MQCFIL(CMQCFC.MQIACF_Q_ATTRS , attrs) };

// logger.log("Querying current depth of current queue.");
MQMessage[] responses = agent.send(CMQCFC.MQCMD_INQUIRE_Q, parameters);

QueueInfo info = new QueueInfo();

for (int i = 0; i < responses.length; i++) {
MQCFH cfh = new MQCFH(responses[i]);

// Check the PCF header (MQCFH) in the response message

if (cfh.reason == 0) {
String name = "";
Integer depth = new Integer(0);

for (int j = 0; j < cfh.parameterCount; j++) { // Extract what we want from the returned attributes

PCFParameter p = PCFParameter.nextParameter(responses[i]);

switch (p.getParameter()) {
case CMQC.MQCA_Q_NAME:
name = (String) p.getValue();
info.name = name;
break;
case CMQC.MQIA_CURRENT_Q_DEPTH:
depth = (Integer) p.getValue();
info.depth = depth.intValue();
break;
case CMQC.MQIA_OPEN_INPUT_COUNT:
Integer inputCount = (Integer) p.getValue();
info.inputCount = inputCount.intValue();
break;
case CMQC.MQIA_OPEN_OUTPUT_COUNT:
Integer outputCount = (Integer) p.getValue();
info.outputCount = outputCount.intValue();
break;
case CMQC.MQIA_Q_TYPE:
info.type = ((Integer) p.getValue()).intValue();
break;
case CMQC.MQIA_DEFINITION_TYPE:
info.definitionType = ((Integer) p.getValue()).intValue();
break;
case CMQC.MQIA_INHIBIT_PUT:
info.putNotAllowed = ((Integer) p.getValue()).intValue() == 1;
break; case CMQC.MQIA_INHIBIT_GET:
info.getNotAllowed = ((Integer) p.getValue()).intValue() == 1;
default:
}
}

// System.out.println("Queue " + name + " curdepth " + depth);

return info;

} else {
System.out.println("PCF error:\n" + cfh);

// Walk through the returned parameters describing the error

for (int j = 0; j < cfh.parameterCount; j++) {
System.out.println(PCFParameter.nextParameter(responses[0]));
}

throw new Exception("PCF Error [reason :" + cfh.reason + "]");
}
}

return null;

} catch (Exception e) {
throw e;
} finally {
if (agent != null) {
try {
agent.disconnect();
} catch (Exception e) {
logger.log(e);
}
}
}

4. 到底什么是消息队列Java中如何实现消息队列

“消息队列”是在消息的传输过程中保存消息的容器。和我们学过的LinkedHashMap,TreeSet等一样,都是容器。既然是容器,就有有自己的特性,就像LinkedHashMap是以键值对存储。存取顺序不变。而消息队列,看到队列就可以知道。这个容器里面的消息是站好队的,一般遵从先进先出原则。

java中已经为我们封装好了很多的消息队列。在java 1.5版本时推出的java.util.concurrent中有很多现成的队列供我们使用。特性繁多,种类齐全。是你居家旅游开发必备QAQ。

下面简单列举这个包中的消息队列

  1. :阻塞队列 BlockingQueue

  2. 数组阻塞队列 ArrayBlockingQueue

  3. 延迟队列 DelayQueue

  4. 链阻塞队列 LinkedBlockingQueue

  5. 具有优先级的阻塞队列 PriorityBlockingQueue

  6. 同步队列 SynchronousQueue

  7. 阻塞双端队列 BlockingDeque

  8. 链阻塞双端队列 LinkedBlockingDeque

    不同的队列不同的特性决定了队列使用的时机,感兴趣的话你可以详细了解。具体的使用方式我就不赘述了

5. mq通道和队列的关系

Mq通道和队列属于辅助的关系,他们两个需要共同建立才可以更好的作用。

(5)javamq队列扩展阅读

一个队列管理器可以有多个队列和多个通道。

队列管理器相当于RabbitMQ中的虚拟主机。

队列分为本地队列,远程队列,传输队列。

通道分为发送通道、接收通道、服务器通道等等。

发送到本地队列上的消息存储在本机上。

发送到远程队列上的消息,通过绑定传输队列传输到别的队列管理器上的本地队列上存储。

通道为消息进出队列的渠道桥梁,发送通道只能出,接收通道只能进,服务器通道可以进出。

本地例子:

发送消息===>Java程序===>服务器通道===>本地队列===>服务器通道===>Python程序===>收到消息

两家公司各自服务器AB例子:

公司A发送消息===>Java程序===>服务器通道A===>远程队列A>>>>传输队列A>>>>发送通道A>>>>接收通道B>>>>本地队列B===>服务器通道B===>Python程序===>公司B收到消息===>响应===>响应消息发送===>Python程序===>服务器通道B===>远程队列B>>>>传输队列B>>>>发送通道B>>>>接收队列A>>>>本地队列A===>服务器通道A===>Java程序===>公司A收到响应消息

6. Java里如何查询MQ队列属性

你用的是IBM MQ还是Apache的? 一般通过JAVA的JMS可以取得。
例如IBM MQ里有个MQQueue 对象

// 获取队列实例
MQQueue queue = qMgr.accessQueue("TEST_QUEUE", openOptions);
//获取当前队列最长消息的长度
queue.getMaximumMessageLength()
//获取当前队列最长深度

queue.getMaximumMessageLength()

7. 请问用java连接MQ时,如何获得某一个队列管理器下所有队列名称。

引起这个问题一个很有可能的原因是队列管理器在不正常停止后,虽然ps -ef | grep mq看不到此队列管理器的进程,但此MQ队列管理器的进程占用的信号灯和共享内存却没有被释放掉。解决办法如下:
1. 先查看是否有此队列管理器残留的 信号灯和共享内存。命令如下:
ipcs -a | grep mq
2. 如果有,使用ipcrm命令清除 残留的信号灯和共享内存,命令如下:
ipcrm -s <semphore id>
ipcrm -m <shared memory id >
3. 再次启动MQ队列管理器

8. 在JAVA开发中,如何查询MQ中的队列句柄状态

你用的是IBM MQ还是Apache的? 一般通过JAVA的JMS可以取得。
例如IBM MQ里有个MQQueue 对象

// 获取队列实例
MQQueue queue = qMgr.accessQueue("TEST_QUEUE", openOptions);
//获取当前队列最长消息的长度
queue.getMaximumMessageLength()
//获取当前队列最长深度

queue.getMaximumMessageLength()

等等功能都是提供的,具体你下载个WebSphere MQ API 找到MQQueue一看便知。

9. MQ队列可以存放java对象吗

可以的. 序列化之后存放到mq上面去.
但是不建议使用序列化和反序列化的方式.
最简单的一种方式把java对象转成json字符串,存在mq上面.

阅读全文

与javamq队列相关的资料

热点内容
阿里云服务器终端在哪里 浏览:144
app纸有什么用 浏览:219
cuteftp命令 浏览:502
最开始的编程语言是什么 浏览:757
at远程命令 浏览:490
云服务器哪家好点 浏览:211
android系统源码阅读 浏览:926
dumpjava分析工具 浏览:678
怎么下载cpu源码 浏览:154
代码加密怎么取消 浏览:888
编译原理代码在哪里运行 浏览:584
解密摄影pdf 浏览:72
算法编程中级题目 浏览:250
c语言编译器毕业设计 浏览:717
医保卡申请app哪个好 浏览:945
阿里云服务器上传源码 浏览:602
营销管理科特勒pdf 浏览:696
愿望清单app哪个好 浏览:461
安卓外放声音怎么解决 浏览:196
脉脉app干什么用的 浏览:362