Linux下的IBMMQ使用和配置
队列管理器相关命令
crtmqm -q QM_TEST 建立默认队列管理器QM_TEST
strmqm QM_TEST 启动队列管理器QM_TEST
runmqsc QM_TEST 运行队列管理器QM_TEST
endmqm QM_TEST 停止队列管理器QM_TEST
dltmqm QM_TEST 删除队列管理器QM_TEST
1
创建QM_TEST的队列管理器队列
建立默认队列管理器QM_TEST
[mqm@hadoop1 bin]$ crtmqm -q QM_TEST
WebSphere MQ queue manager created.
Directory '/var/mqm/qmgrs/QM_TEST' created.
The queue manager is associated with installation 'Installation1'.
Creating or replacing default objects for queue manager 'QM_TEST'.
Default objects statistics : 79 created. 0 replaced. 0 failed.
Completing setup.
Setup completed.
查看队列状态
// Ended未启用
[mqm@hadoop1 bin]$ dspmq
QMNAME(QM_TEST) STATUS(Ended immediately)
启动队列管理器
[mqm@hadoop1 bin]$ strmqm QM_TEST
WebSphere MQ queue manager 'QM_TEST' starting.
The queue manager is associated with installation 'Installation1'.
5 log records accessed on queue manager 'QM_TEST' during the log replay phase.
Log replay for queue manager 'QM_TEST' complete.
Transaction manager state recovered for queue manager 'QM_TEST'.
WebSphere MQ queue manager 'QM_TEST' started using V8.0.0.4.
运行队列管理器
[mqm@hadoop1 bin]$ runmqsc QM_TEST
5724-H72 (C) Copyright IBM Corp. 1994, 2015.
Starting MQSC for queue manager QM_TEST.
定义本地队列
ql:定义的本地队列名 maxdepth:消息最大接收,defpsist 队列重启消息不丢
def ql(QUEUE_RES) maxdepth(10000) defpsist(yes) replace
1 : def ql(QUEUE_RES) maxdepth(10000) defpsist(yes) replace
AMQ8006: WebSphere MQ queue created.
定义服务器连接通道
// define channel(CH1) chltype(SVRCONN) trptype(TCP) mcauser(‘mqm’)
DEFINE CHANNEL(CONN_CHANNEL) CHLTYPE(SVRCONN) TRPTYPE(TCP)
1 : DEFINE CHANNEL(CONN_CHANNEL) CHLTYPE(SVRCONN) TRPTYPE(TCP)
AMQ8014: WebSphere MQ channel created.
// 开启通道
start chl(CONN_CHANNEL)
1 : start chl(CONN_CHANNEL)
AMQ8018: Start WebSphere MQ channel accepted.
输入end退出队列管理器控制台。
测试发送和接收消息
发送消息
// amqsput queue_name queue_manager_name 发送消息
[mqm@hadoop1 bin]$ amqsput QUEUE_RES QM_TEST
Sample AMQSPUT0 start
target queue is QUEUE_RES
// 输入字符串后,敲回车键结束文字输入
hello ibmmq
Sample AMQSPUT0 end
接收消息
// amqsput queue_name queue_manager_name 发送消息
[mqm@hadoop1 bin]$ amqsget QUEUE_RES QM_TEST
Sample AMQSGET0 start
message <hello ibmmq>
启动端口监听(即ibmmq设置端口)
[mqm@hadoop1 bin]$ runmqlsr -m QM_TEST -p 1414 -t tcp &
[1] 2167
[mqm@hadoop1 bin]$ 5724-H72 (C) Copyright IBM Corp. 1994, 2015.
// 查看1414端口是否启用
[mqm@hadoop1 bin]$ netstat -nltp | grep 1414
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::1414 :::* LISTEN 2167/runmqlsr
1
其他设置修改(需要运行队列管理器窗口)
查看队列管理器字符集:
dis qmgr
修改字符集:
alter qmgr CCSID(字符集号)
显示队列管理器中的所有队列:
dis q(*)
查询所有通道
display chl(*)
1
java代码进行消息的生产和消费
导入MQ安装目录下的依赖包,具体代码如下面所示:
import com.ibm.mq.*;
import org.junit.Before;
import org.junit.Test;
public class IBMMq {
// 队列管理器
public static MQQueueManager QMGR;
// 队列
public static MQQueue QUEUE;
// 请求队列即 接收队列、本地队列
static int reqOpenOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
@Test
public void sendMessage() throws Exception {
// 要写入队列的消息
MQMessage msg = new MQMessage();
msg.format = MQC.MQFMT_STRING;
msg.characterSet = 1381;
msg.encoding = 1381;
MQPutMessageOptions gmo = new MQPutMessageOptions();
// 设置消息用不过期
msg.expiry = -1;
msg.writeString("hello ibmmq");
QUEUE.put(msg,gmo);
System.out.println("发送消息成功");
QUEUE.close();
}
@Test
public void receiveMsg() throws Exception{
int currentDepth = QUEUE.getCurrentDepth();
System.out.println("消息长度:"+currentDepth);
MQMessage msg = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
// 本次接收失败,应该继续循环
QUEUE.get(msg, gmo);
// 接收成功后,启动handler处理接收后的消息
String reqMsgStr = msg.readStringOfByteLength(msg.getDataLength());
System.out.println(reqMsgStr);
}
/**
* ibmMq连接初始化,这里连接的要和上面你配置的Mq对象名称一致
*/
@Before
public void initConn() throws Exception {
MQEnvironment.hostname = "10.211.55.11";
MQEnvironment.port = 1414; // TCP/IP port
MQEnvironment.channel = "test_conn";
MQEnvironment.CCSID = 1381;
// 用户名对应的密码
MQEnvironment.userID = "MUSR_MQADMIN";
// 默认密码为123456
MQEnvironment.password = "123456";
QMGR = new MQQueueManager("Queue_Manager");
QUEUE = QMGR.accessQueue("test_receive",
MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_OUTPUT);
// System.out.println(QUEUE);
}
}