JavaShuo
栏目
标签
一段同步接收和发送MQ消息的代码
时间 2019-11-08
标签
一段
同步
接收
发送
消息
代码
繁體版
原文
原文链接
JAVA代码:
Java代码
package
com.sdb.payment.core.mq;
import
org.apache.log4j.Logger;
import
com.ibm.mq.MQC;
import
com.ibm.mq.MQEnvironment;
import
com.ibm.mq.MQException;
import
com.ibm.mq.MQGetMessageOptions;
import
com.ibm.mq.MQMessage;
import
com.ibm.mq.MQPutMessageOptions;
import
com.ibm.mq.MQQueue;
import
com.ibm.mq.MQQueueManager;
public
class
MessageQueueService {
private
static
Logger logger = Logger.getLogger(MessageQueueService.
class
);
private
String hostname =
"192.168.0.117"
;
private
String channel =
"CHL.SVRCONN"
;
private
String queueManager =
"QM_SERVER"
;
private
String sendQueue =
"OMP.QRMT"
;
private
String recvQueue =
"OMP.QLCA"
;
private
int
port =
24100
;
private
int
ccsid =
1381
;
private
int
failedCount =
5
;
private
int
intervalTime =
1000
;
public
MessageQueueService() {
MQEnvironment.hostname = hostname;
MQEnvironment.channel = channel;
MQEnvironment.CCSID = ccsid;
MQEnvironment.port = port;
}
public
String send(String sendMsg)
throws
Exception {
MQQueueManager qManager =
new
MQQueueManager(queueManager);
// send message
int
openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
MQQueue sQueue = qManager.accessQueue(sendQueue, openOptions);
MQPutMessageOptions pmo =
new
MQPutMessageOptions();
MQMessage send =
new
MQMessage();
send.write(sendMsg.getBytes());
System.out.println(
"send message : "
+ sendMsg);
sQueue.put(send, pmo);
sQueue.close();
System.out.println(
"send message Id"
);
for
(
int
i =
0
; i<send.messageId.length; i++) {
System.out.print(send.messageId[i]);
}
System.out.println();
System.out.println(
"send message Id"
);
// fetch message
openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING
+ MQC.MQOO_INPUT_SHARED;
MQQueue rQueue = qManager.accessQueue(recvQueue, openOptions);
MQGetMessageOptions getOptions =
new
MQGetMessageOptions();
getOptions.options = MQC.MQGMO_WAIT;
getOptions.waitInterval = intervalTime;
MQMessage recvMsg =
new
MQMessage();
recvMsg.messageId = send.messageId;
//这里是关键,要保持接收的msgid跟发送的msgid值是同样的,
//这样就会根据msgId来取队列的消息了,而不会取到别的消息
send.clearMessage();
boolean
received =
false
;
int
fetchCount =
0
;
while
(!received) {
try
{
fetchCount++;
rQueue.get(recvMsg, getOptions);
//logger.debug("the " + fetchCount + " time fetch message!");
System.out.println(
"fetch message !!!"
);
received =
true
;
}
catch
(MQException me) {
if
(me.reasonCode == MQException.MQRC_NO_MSG_AVAILABLE) {
if
(fetchCount > failedCount) {
recvMsg.clearMessage();
rQueue.close();
qManager.disconnect();
//logger.error("can't fetch message for " + me.getMessage());
return
null
;
}
}
}
catch
(Exception ex) {
recvMsg.clearMessage();
rQueue.close();
qManager.disconnect();
//logger.error("can't fetch message for " + ex.getMessage());
return
null
;
}
}
byte
[] bMsg =
new
byte
[recvMsg.getMessageLength()];
recvMsg.readFully(bMsg);
System.out.println(
"rec correlationId Id"
);
for
(
int
i =
0
; i<recvMsg.correlationId.length; i++) {
System.out.print(recvMsg.correlationId[i]);
}
System.out.println();
System.out.println(
"rec correlationId Id"
);
String recv =
new
String(bMsg);
recvMsg.clearMessage();
rQueue.close();
qManager.disconnect();
return
recv;
}
public
void
setChannel(String channel) {
this
.channel = channel;
}
public
void
setHostname(String hostname) {
this
.hostname = hostname;
}
public
void
setQueueManager(String queueManager) {
this
.queueManager = queueManager;
}
public
void
setPort(
int
port) {
this
.port = port;
}
public
void
setIntervalTime(
int
intervalTime) {
this
.intervalTime = intervalTime;
}
public
void
setFailedCount(
int
failedCount) {
this
.failedCount = failedCount;
}
public
void
setRecvQueue(String recvQueue) {
this
.recvQueue = recvQueue;
}
public
void
setSendQueue(String sendQueue) {
this
.sendQueue = sendQueue;
}
}
相关文章
1.
Rocket MQ 的三种消息发送(同步、异步、单向)和消息订阅
2.
stream消息接收和消息发送
3.
MQ消息接收接口
4.
Spring整合JMS、IBM MQ发送和接收消息
5.
spring 整合ibm mq 发送和接收消息
6.
【MQ】Eclipse向RocketMQ中发送和接收消息
7.
同步方式的消息发送和异步方式的消息发送
8.
Rocketmq同步发送消息
9.
ActiveMQ发送、接收消息
10.
socket实现消息发送和接收
更多相关文章...
•
HTTP 消息结构
-
HTTP 教程
•
Markdown 代码
-
Markdown 教程
•
IntelliJ IDEA 代码格式化配置和快捷键
•
IntelliJ IDEA代码格式化设置
相关标签/搜索
消息队列MQ
代码段
消息
代码收集
接送
同步
接收
接和
代收
浏览器信息
XLink 和 XPointer 教程
MyBatis教程
代码格式化
乱码
开发工具
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
微软准备淘汰 SHA-1
2.
Windows Server 2019 Update 2010,20H2
3.
Jmeter+Selenium结合使用(完整篇)
4.
windows服务基础
5.
mysql 查看线程及kill线程
6.
DevExpresss LookUpEdit详解
7.
GitLab简单配置SSHKey与计算机建立连接
8.
桶排序(BucketSort)
9.
桶排序(BucketSort)
10.
C++ 桶排序(BucketSort)
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
Rocket MQ 的三种消息发送(同步、异步、单向)和消息订阅
2.
stream消息接收和消息发送
3.
MQ消息接收接口
4.
Spring整合JMS、IBM MQ发送和接收消息
5.
spring 整合ibm mq 发送和接收消息
6.
【MQ】Eclipse向RocketMQ中发送和接收消息
7.
同步方式的消息发送和异步方式的消息发送
8.
Rocketmq同步发送消息
9.
ActiveMQ发送、接收消息
10.
socket实现消息发送和接收
>>更多相关文章<<