IBM mq概念

消息:是websphere mq中最小的概念,包括:应用数据体和消息数据头
队列:可以简单地把队列看成一个容器,用来存放消息。由4块组成:本地队列、远程队列、别名队列、模型队列,其中只有本地队列是真正意义上的队列实体,可以存放消息。当消息被添加到队列时,缺省是添加到最后,删除时,却是从头开始删。
远程队列和别名队列只是一个定义,指向另一个队列实体。
本地队列按功能分又包括:初始化队列、传输队列、目标队列和死信队列。
1、初始化队列用做消息触发功能。
2、传输队列只是暂存待传的消息, 在条件许可的情况下, 通过管道将消息传送其它的队列管理器。
3、目标队列是消息的目的地, 可以长期存放消息。 如果消息不能送达目
标队列, 也不能再路由出去, 则被自动放入死信队列保存
队列管理器是消息队列的管理者,用来维护和管理消息队列,一台机器上可以创建一个或多个队列管理器,通常情况上,同一网络下队列管理器不能重名。
通道是两个队列管理器之前的一种单向的点对点的通信连接,消息在通道中只能单向的流动。如果需要双向的流动,可以创建一对通道,一来一去。

package com.hzbank.test.controller;


import com.ibm.mq.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/mq")
public class MqController {
    // 定义队列管理器和队列的名称
    private static String hostname = "10.80.63.101"; // MQ服务器的IP地址
    private static int port = 1414; // MQ端口
    private static int ccsid = 1381; // 服务器MQ服务使用的编码1381代表GBK、1208代表UTF
    private static String qmName = "QM_JACK"; // MQ的队列管理器名称;
    private static String channel = "CNN_JACK"; // 服务器连接的通道名称
    private static String qName = "QUEUE_RECV"; // MQ远程队列的名称;
    private static MQQueueManager qMgr; //队列管理器实例
    private MQQueue qQueue;//队列实例
/**
 * 初始化队列信息
 *
 * */
    public void init(){
        MQEnvironment.hostname = this.hostname; // 安裝MQ所在的ip address
        MQEnvironment.port = this.port; // TCP/IP port
        MQEnvironment.channel = this.channel;
        MQEnvironment.CCSID = this.ccsid;
        try {
            qMgr = new MQQueueManager(this.qmName);//实例化具体的队列管理器
            int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE
                    | MQC.MQOO_OUTPUT;
            qQueue = qMgr.accessQueue(qName, qOptioin);//实例化具体的队列
        } catch (MQException e) {
            e.printStackTrace();
        }
    }
    /***
     *把消息放进队列中
     *
     */

    public void sendMessage(byte[] qByte){
        try {
            MQMessage qMsg = new MQMessage();//实例化具体的消息
            qMsg.write(qByte);//把传输的数据写进消息中
            MQPutMessageOptions pmo = new MQPutMessageOptions();
            qQueue.put(qMsg, pmo);
            System.out.println("消息已经放进队列");

        } catch (MQException e) {
            e.printStackTrace();
            System.out
                    .println("A WebSphere MQ error occurred : Completion code "
                            + e.completionCode + " Reason Code is "
                            + e.reasonCode);
        } catch (java.io.IOException e) {
            e.printStackTrace();
            System.out
                    .println("An error occurred whilst to the message buffer "
                            + e);
        }
    }

    /**
     * 从消息队列取数据
     */
    public void getMessage() {
        try {
            MQMessage retrievedMessage = new MQMessage();

            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options += MQC.MQPMO_SYNCPOINT;
            qQueue.get(retrievedMessage, gmo);
            int length = retrievedMessage.getDataLength();
            byte[] msg = new byte[length];
            retrievedMessage.readFully(msg);
            String sMsg = new String(msg,"GBK");
            System.out.println("取到的消息是:"+sMsg);

        } catch (RuntimeException e) {
            e.printStackTrace();
        } catch (MQException e) {
            e.printStackTrace();
            if (e.reasonCode != 2033) // 没有消息
            {
                e.printStackTrace();
                System.out
                        .println("A WebSphere MQ error occurred : Completion code "
                                + e.completionCode
                                + " Reason Code is "
                                + e.reasonCode);
            }
        } catch (java.io.IOException e) {
            System.out
                    .println("An error occurred whilst to the message buffer "
                            + e);
        }
    }
    @RequestMapping("/test")
public void testRun(){
      this.init();//初始化mq
        try {
            String str="";//假设要发送的数据是String类型的
            str="我要尝试往队列中发送消息";
            this.sendMessage(str.getBytes("UTF-8"));//往队列中发送消息
            this.getMessage();//从队列中取消息

        } catch (Exception e) {
            e.printStackTrace();
        }
}

}

你可能感兴趣的:(IBM mq概念)