Linux下的ibm mq使用和配置demo

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);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章