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.
网络层协议以及Ping
2.
ping检测
3.
为开发者总结了Android ADB 的常用十种命令
4.
3·15 CDN维权——看懂第三方性能测试指标
5.
基于 Dawn 进行多工程管理
6.
缺陷的分类
7.
阿里P8内部绝密分享:运维真经K8S+Docker指南”,越啃越香啊,宝贝
8.
本地iis部署mvc项目,问题与总结
9.
InterService+粘性服务+音乐播放器
10.
把tomcat服务器配置为windows服务的方法
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
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实现消息发送和接收
>>更多相关文章<<