ibm mq c语言,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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值