1. IBM MQSeries基本由一个消息传输系统和一个应用程序接口组成,其资源是消息和队列(Messaging and Queuing)。 队列管理器(Queue Manager):管理队列的系统,实现网络通信,保证消息安全可靠地传输到目的地。
  2. 用于确保队列之间的信息提供,包括网络中不同系统上的的远程队列之间的信息提供。并保证网络故障或关闭后的恢复。
  3. 队列:一个安全的信息存储区。因为信息存放在队列中,所以应用程序可以相互独立的运行,以不同的速度,在不同的时间,在不同的地点。
  4. 本地队列:对程序而言,本地队列属于该程序所连接的队列管理器。
  5. 远程队列:该队列不属于该程序所连接的队列管理器,而只是远端队列管理器的队列在本地的定义。
  6. 传输队列:它是一个本地队列,保存了指定要发送到远端的消息。
  7. 死信队列:它是一个本地队列,用于存放无法传递的消息。
  8. 通道:在两个队列管理器之间建立起来的数据传输链路。
  9. 应用程序接口:应用程序和信息系统之间通过MQSeries API实现的接口。

import com.ibm.mq.MQC;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;

/**
 * 发送消息程序
 */
public class Send {

public static void main(String[] args) {
   try {

// 主机名称
      String hostName = "192.168.1.101";
      // 端口(缺省 1414)
      int port = 1515;
      // 通道名称(缺省)
      String channel = "SYSTEM.DEF.SVRCONN";
      // 队列管理器名称
      String qManager = "send";
      // 队列名称 (远程队列名)
      String qName = "Q1";

// Set up the MQEnvironment properties for Client Connections.
      // 建立MQEnvironment 属性以便客户机连接.
      MQEnvironment.hostname = hostName;
      MQEnvironment.port = port;
      MQEnvironment.channel = channel;
      MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
      MQEnvironment.CCSID = 1381;
     
      // Connection To the Queue Manager.
      // 连接到队列管理器.
      MQQueueManager qMgr = new MQQueueManager(qManager);

/**
       * Set up the open options to open the queue for out put
       * and additionally we have set the option to fail if the queue manager
       * is quiescing.
       *
       * 建立打开选项以便打开用于输出的队列,进一步而言,如果队列管理器是
       * 停顿的话,我们也已设置了选项去应对不成功情况.
       */
      int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

// Open the queue.
      // 打开队列.
      MQQueue queue = qMgr.accessQueue(qName, openOptions, null, null,
        null);

// Set the put message options , we will use the default setting.
      // 设置放置消息选项我们将使用默认设置.
      MQPutMessageOptions pmo = new MQPutMessageOptions();

/**
       * Next we Build a message The MQMessage class encapsulates the data
       * buffer that contains the actual message data, together with all the MQMD
       * parameters that describe the message.
       *
       * 下一步我们建立消息,MQMessage类压缩了包含实际消息数据的数据缓冲区,
       * 和描述消息的所有MQMD 参数.
       *
       * To Build a new message, create a new instance of MQMessage class
       * and use writxxx (we will be using writeString method).
       * The put() method of MQQueue also takes an instance of the
       * MQPutMessageOptions class as a parameter.
       *
       * 欲建立新消息,创建MQMessage类新实例以及使用writxxx(我们将使用writeString 方法.).
       * MQQueue 的put()方法也可作为参数MQPutMessageOptions 类的实例.
       */

// Create The message buffer.
      // 创建消息缓冲区.
      MQMessage outMsg = new MQMessage();

// Set the MQMD format field.
      // 设置MQMD 格式字段.
      outMsg.format = MQC.MQFMT_STRING;

// Prepare message with user data.
      // 准备用户数据消息.
      String msgString = "HEAD7C5218991310615536   BOCOMC     0100521899        200909170720470020090917101000000022164428000000020000000000000000000000020000  1110408715  0000    0 1564439990000044399900000                          1 1  000                                               DOMN200909170720470016100115400000000156          HA1310011130028738445 AT032007101900000068835700000110000000000000000020090915000000010000000000431643000000000000                       PENG PING          6532CAFCR102                                                                    000281548016372856DQPD        2007100120071030                               000002000000000000000000000068835700000110000000000000000000000001000000000043164300000048411900000010000000620090917072055550                                                                                                                                      19790117                                                               518000          20090917000000272977113714719646         1310710130979       MALE                    SSNO180001016790                             MS0000000000                2007101920090912000000002007103001                  0           00000004841192007102004064394C       000000000           TAIL";

// Now we put The message on the Queue.
      // 现在我们在队列上放置消息.
      outMsg.writeString(msgString);

// Commit the transaction.
      // 提交事务处理.
      queue.put(outMsg, pmo);
      qMgr.commit();
      System.out.println(" The message has been Sussesfully put/n/n#########");

// Close the the Queue and Queue manager objects.
      // 关闭队列和队列管理器对象.
      queue.close();
      qMgr.disconnect();

} catch (MQException ex) {

System.out.println("An MQ Error Occurred: Completion Code is :/t" +
      ex.completionCode + "/n/n The Reason Code is :/t" + ex.reasonCode);
      ex.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

}

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.MQQueue;
import com.ibm.mq.MQQueueManager;

/**
 * 消息接收器应用程序
 *
 * 调入MQSeries Java API package
 * 为客户机连接设置环境属性
 * 连接到队列管理器
 * 为打开MQSeries 队列设置选项
 * 为获取消息打开应用程序
 * 设置选项,从应用程序队列获取消息
 * 创建消息缓冲区
 * 从队列获取消息到消息缓冲区
 * 从消息缓冲区读取用户数据并在控制台上显示
 */

public class Receiver {

public static void PtpReceiver() {
    try {
    
     // 主机名称
     String hostName = "192.168.1.101";
     // 端口(缺省 1414)
     int port = 1616;
     // 通道名称(缺省)
     String channel = "SYSTEM.DEF.SVRCONN";
     // 队列管理器名称
     String qManager = "receive";
     // 队列名称 (本地对列名)
     String qName = "Q1";

// 建立MQEnvironment 属性以便客户机连接
     MQEnvironment.hostname = hostName;
     MQEnvironment.port = port;
     MQEnvironment.channel = channel;
     MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
     MQEnvironment.CCSID = 1381;
    
     // Connection To the Queue Manager.
     // 连接到队列管理器.
     MQQueueManager qMgr = new MQQueueManager(qManager);

/**
      * Set up the open options to open the queue for out put and
      * additionally we have set the option to fail if the queue manager
      * is quiescing.
      *
      * 建立打开选项以便打开用于输出的队列,
      * 进一步而言,如果队列管理器是停顿的话,我们也
      * 已设置了选项去应对不成功情况.
      */

// Open the queue.
     // 打开队列.
     int openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING;

// Set the put message options.
     // 设置放置消息选项.
     MQQueue queue = qMgr.accessQueue(qName, openOptions, null, null, null);

MQGetMessageOptions gmo = new MQGetMessageOptions();

// Get messages under sync point control.
     // 在同步点控制下获取消息.
     gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;

// Wait if no messages on the Queue.
     // 如果在队列上没有消息则等待.
     gmo.options = gmo.options + MQC.MQGMO_WAIT;

// Fail if QeueManager Quiescing.
     // 如果队列管理器停顿则失败.
     gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;

// Sets the time limit for the wait.
     // 设置等待的时间限制.
     gmo.waitInterval = 3000;

/**
      * Next we Build a message The MQMessage class encapsulates the data
      * buffer that contains the actual message data, together with all the MQMD
      * parameters that describe the message.
      *
      * 下一步我们建立消息,MQMessage
      * 类压缩了包含实际消息数据的数据缓冲区,
      * 和描述消息的所有MQMD 参数.
      */

// Create the message buffer.
     // 创建消息缓冲区.
     MQMessage inMsg = new MQMessage();

// Get the message from the queue on to the message buffer.
     // 从队列到消息缓冲区获取消息.
     queue.get(inMsg, gmo);

// Read the User data from the message.
     // 从消息读取用户数据.
     String msgString = inMsg.readString(inMsg.getMessageLength());
     // 控制台输出
     System.out.println(" The Message from the Queue is : /n/n" + msgString);

// Commit the transaction.
     // 提交事务处理.
     qMgr.commit();

// Close the the Queue and Queue manager objects.
     // 关闭队列和队列管理器对象.
     queue.close();
     qMgr.disconnect();

} catch (MQException ex) {

System.out.println("An MQ Error Occurred: Completion Code is :/t" +
     ex.completionCode + "/n/n The Reason Code is :/t" + ex.reasonCode);
     ex.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

/**
    * @param args
    */
   public static void main(String[] args) {
    // TODO Auto-generated method stub
    PtpReceiver();
   }

}

注意字符集问题

一:MQEnvironment.CCSID = 1381;(在JAVA连接代码时指定一下字符集)

二:修改字符集设置

一般Unix、Linux平台中MQ默认的字符集为819,而Windows平台为1381,所以你必须改变其字符集,使两边的字符集相同。改变方法:

1.通过DOS进入MQ的安装目录,进入/bin下。假如要更改的队列管理器为A

2.用指令“strmqm A”启动队列管理器A。

3.用指令“runmqsc A”启动A的MQSC。

4.运行指令“ALTER QMGR CCSID(819)”“end”则修改字符集为819

Websphere MQ 开发实例相关推荐

  1. Linux上的WebSphere MQ开发快速入门

    本文将通过用于向队列发送消息和从队列接收消息的示例应用程序说明如何在 Linux 上着手安装和配置 WebSphere MQ,以及如何为 MQ 环境开发 Java 应用程序. 引言 本文的目标是让您轻 ...

  2. websphere mq_使用WebSphere MQ应用程序活动跟踪提高消息的可见性

    websphere mq 本文使用场景来演示IBM®WebSphere®MQ应用程序活动跟踪的潜在用途,包括问题确定和维护WebSphere MQ消息的审计跟踪. 这些方案中将使用两种工具来格式化&q ...

  3. WebSphere MQ ibm[转]

    [编者按]关于MQ,我以前只是有个大概概念.譬如之前,就是根据前端送过来的消息,format成后端所需要的消息格式,并将format后的消息放入一个Queue文件中,如果消息发送成功(收到该reque ...

  4. websphere mq_最佳实践:WebSphere MQ共享队列和应用程序

    websphere mq 关于IBM®WebSphere®MQ共享队列的优点,尤其是它们提供消息的连续可用性的能力,已有很多论述. 但是,在规划和实施过程中,出现了一些有关最佳使用共享队列及其对应用程 ...

  5. Websphere MQ Everyplace 和 Websphere MQ集成实践

    Websphere MQ Everyplace 和 Websphere MQ集成实践 1. 概述 IBM Websphere MQ Everyplace(MQe)是Websphere MQ(WMQ)产 ...

  6. java服务端监听_Java客户端正在监听WebSphere MQ服务器?

    我需要编写一个监听WebSphere MQ服务器的Java客户机.消息放入服务器的队列中.Java客户端正在监听WebSphere MQ服务器? 我开发了这个代码,但我不确定它是否正确.如果正确,那我 ...

  7. JBOSS+EJB3之Entity 开发实例

    我用的是 mysql 数据库, EJB3.0 相对于2.0 变化蛮大的,真的是迫于 Spring+Hibernate 的逼式,ejb 3.0 已经出现几年了,自从她轻装上阵,也不知道现在的应用情况如何 ...

  8. IBM WebSphere MQ 7.5基本用法

    一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...

  9. ibm服务器安装aix系统,在aix下安装ibm websphere MQ 7.0

    最近为项目设置灾难恢复环境(包括和应用程序的灾难恢复). Oracle同步已通过DATAGUARD实现. 现在要将应用程序部署到灾难恢复室中的服务器,该应用程序软件使用ibm Websphere. M ...

最新文章

  1. 北交的计算机和北理,北航与北理
  2. html5 扩展属性,HTML5属性的介绍和扩展.doc
  3. nginx location反向代理不对等时的处理
  4. 【VxWorks系列】任务间同步与通信之共享内存
  5. 16kb等于多少b_MySQL为何选择B+树存储索引?
  6. 硬币找零,最长上升子序列,背包问题等动态规划问题详解
  7. linux ln链接命令
  8. 三本学计算机没用吗,腾讯员工:我211学计算机都觉得写代码难,三本的人能写代码为啥考不上211...
  9. delphi xe3 oracle,delphixe3
  10. 1.Oracle 安装教程及使用
  11. sts4linux,STS3下载和安装,STS4升级
  12. (LeetCode)数数关系——Non-decreasing Array(非递减数组)
  13. 使用Python播放MIDI音符
  14. 如何实现VMware下Ubuntu和Windows之间的复制粘贴?
  15. 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
  16. 锁定计算机忘记密码,笔记本防盗锁忘记密码_笔记本电脑锁忘记密码
  17. android r AB ota fail
  18. 问题 S: 除法问题(第四讲)
  19. Google Earth Engine(GEE)——NDWI水体阈值的监测
  20. vue项目批量加载url文件并打包到zip下载

热门文章

  1. linux内核中的数据结构
  2. 最详细的phpmailer的使用方法
  3. 微信支付教程系列之公众号支付
  4. 风险案例-25期-与有过合作经历客户在新合同约定中过于简单、范围不明确,导致客户对新需求工作量不认可...
  5. MySQL学习笔记_9_MySQL高级操作(上)
  6. 《C++STL基础及应用》读书笔记
  7. Oracle配置方面问题收集
  8. [MySql] - Windows MySql 8.x 手动zip包安装与外网访问登录权限设定
  9. mysql数据库的介绍及安装
  10. 从Openvswitch代码看网络包的旅程