MQ接口使用和开发培训

合集下载

MQ接口使用和开发培训

MQ接口使用和开发培训

MQ接口使用和开发培训MQ(Message Queue)是一种基于消息传递机制的应用集成技术,它能够提供可靠的异步通信方式,用于解决高并发场景下的数据传输问题。

MQ接口是MQ系统与应用程序之间的接口,用于连接和传输消息。

为了有效地使用和开发MQ接口,首先需要了解MQ的基本概念和使用场景。

MQ的基本架构由生产者、消费者和消息队列三个组件组成。

生产者负责产生消息并将其发送到消息队列,消费者接收消息队列中的消息并进行处理。

消息队列则负责存储消息,并在生产者和消费者之间进行消息传递。

使用MQ接口的主要步骤包括创建连接、创建生产者和消费者、发送和接收消息。

首先,需要建立与MQ系统的连接,可以通过配置文件或代码设置连接参数,如服务器地址、用户名、密码等。

接下来,根据需要创建生产者和消费者对象,通过对象的方法可以发送和接收消息。

发送消息时,需要指定消息的主题和内容;接收消息时,可以选择同步或异步的方式进行处理。

在实际开发中,需要注意MQ的一些重要特性。

首先是消息的可靠性。

为了确保消息不丢失,可以设置ACK机制,即消费者在接收到消息后发送一个确认消息给生产者。

生产者收到确认消息后才会删除消息队列中的消息。

其次是消息的顺序性。

在一些场景下,需要保持消息的顺序,可以使用单个队列或分区队列来处理。

再次是消息的传输效率。

可以使用消息压缩、消息缓存等技术来提高传输效率。

MQ接口的开发培训需要熟悉相应的开发语言和MQ系统的API。

常用的MQ系统包括RabbitMQ、ActiveMQ、Kafka等。

在培训过程中,可以通过实际案例进行演示和实践,例如创建一个简单的消息发布订阅系统,或者使用MQ实现异步任务处理等。

培训还可以包括性能优化和故障处理等方面的内容,帮助开发人员更好地利用MQ接口解决实际问题。

总结起来,使用和开发MQ接口需要了解MQ的基本概念和使用场景,掌握连接、生产者和消费者的创建和使用方法。

开发培训还需要熟悉相应的开发语言和MQ系统的API,并通过实际案例进行演示和实践。

mq开发流程

mq开发流程

MQ(Message Queue)是一种常用的消息中间件,用于在不同的应用程序之间传递消息。

MQ开发流程一般包括以下几个步骤:1. 需求分析和设计在MQ开发之前,需要对需求进行分析和设计。

这包括确定需要传递的消息类型、消息格式、消息传递的频率、消息的可靠性要求等。

同时还需要考虑如何组织消息队列、如何管理消息的生命周期等问题。

2. 选择MQ系统根据需求分析和设计,选择合适的MQ系统。

常见的MQ系统包括RabbitMQ、Kafka、ActiveMQ 等。

选择MQ系统时需要考虑系统的性能、可靠性、易用性、支持的消息类型和协议等因素。

3. 开发消息生产者和消费者在MQ系统中,消息生产者负责将消息发送到队列中,消息消费者负责从队列中消费消息。

因此,需要开发相应的消息生产者和消费者。

在开发消息生产者和消费者时,需要考虑如何序列化和反序列化消息、如何处理异常情况、如何管理消息的生命周期等问题。

4. 集成MQ系统将MQ系统集成到应用程序中。

这包括配置MQ系统参数、创建队列、订阅队列等操作。

在集成MQ系统时需要考虑如何处理异常情况、如何保证消息的可靠性等问题。

5. 测试和调试在MQ系统集成完成后,需要进行测试和调试。

这包括测试消息的发送和接收、测试消息的可靠性和顺序性等方面。

如果发现问题,需要进行修复和调试。

6. 上线和维护在MQ系统测试通过后,可以将系统上线。

在上线后需要进行维护,包括监控系统性能、处理异常情况、升级MQ系统等。

总之,MQ开发流程需要考虑消息的传递、消息的可靠性、系统的性能和易用性等方面。

在开发过程中需要进行测试和调试,确保系统的稳定性和可靠性。

IBMMQ培训教材

IBMMQ培训教材

WebSphere MQ V6概述•很容易连接应用程序和系统•一次性安全提供数据•许多环境o大量操作系统和硬件平台o支持许多程序设计语言o通信协议o点对点和发布/订阅方式o通过简单 API 全部可用•行业消息的行业标准•最近庆祝了成立十周年!WebSphere MQ V6主题•IBM 在 204-126 号发布书(2004 年 6 月)中发表了一项指导方针:“IBM 计划......在 2005 年上半年......发布新版 WMQ。

这些发布将使 ESB 创建和扩充变得更容易......”•提高适用性o文件传输简单,浏览速度快o新增跨平台配置工具•改进可管理性o了解系统正在运行的服务,并影响它o更容易确定问题和避免问题•增强可用性o利用 z/OS 服务•扩充性能、容量和伸缩性o利用 64 位地址空间•本演示说明 IBM 如何达到此陈述的要求由于计划推出新版 WMQ,我们尝试把要进行的各项工作分成几个主题。

这些是该版本要优先实施的功能,而一个功能应当在实施之前归入一个或多个主题。

(记住候选功能太多,总是超过我们在可接受的时间里或用接受的代码可以开发的功能数量。

一个版本不能集成的功能可能会集成在下一个版本里。

)我们这次想研究的两个领域是:a.使 WMQ 新用户很容易选择并快速使用b.即使你有使用早期版本的经验,也更容易管理 WMQ。

我们一直在开展 z/OS 特定的某些活动,完成共享队列工作最后阶段的开发同时使许多增强功能反映更广泛的行业活动。

后面的幻灯片将详细说明其中的许多项目WebSphere MQ V6时间表•2004 年 9 月开始开发 beta 程序o该程序针对有限客户和合作伙伴•2005 年 4 月 19 日发布o发布之后在某些平台上公开进行 beta 测试•2005 年 5 月发布分布式平台 Electronic GA(可下载)•2005 年 5 月发布物理介质和 z/OS GAWebSphere MQ V6初期支持的平台•AIX 5(仅 64 位系统)•Solaris(仅 64 位 Sparc 系统)•HP-UX 11i(仅 64 位 PA-RISC)•Linux/Intel(32 位)、Linux/pSeries(仅 64 位 distros)和 Linux/zSeries o RHEL3、(RHEL4)、SuSE8 和 SuSe9•z/OS 1.4•Windows 2000、XP、2003•OS/400 V5R2 和 i5/OS V5R3虽然某些操作系统的基本要求提高了,但 WMQ V6 支持的平台与 V5.3 基本相同。

mq的使用方法

mq的使用方法

mq的使用方法(最新版3篇)目录(篇1)1.MQ 简介2.MQ 的使用方法3.MQ 的优点4.MQ 的缺点5.MQ 的未来发展正文(篇1)一、MQ 简介消息队列(Message Queue,简称 MQ)是一种应用程序之间的通信机制,通过将消息发送到队列中,然后再从队列中读取消息,实现异步处理和解耦。

消息队列具有可靠性、灵活性和可扩展性等特点,广泛应用于系统解耦、异步处理、流量削峰等场景。

二、MQ 的使用方法1.选择合适的 MQ 软件:目前市场上有很多优秀的 MQ 软件,如RabbitMQ、Kafka、RocketMQ 等,根据实际需求选择合适的 MQ 软件。

2.搭建 MQ 环境:根据所选 MQ 软件的官方文档,搭建相应的环境,包括安装、配置和启动 MQ 服务。

3.生产者发送消息:生产者通过编写代码将消息发送到队列中,代码中需要引入 MQ 相关的库,并配置相应的生产者信息。

4.消费者接收消息:消费者也需要编写代码从队列中接收消息,同样需要引入 MQ 相关的库,并配置相应的消费者信息。

5.处理消息:消费者接收到消息后,进行相应的业务处理,如数据分析、文件存储等。

三、MQ 的优点1.可靠性:消息队列采用持久化存储,保证了消息的可靠传输。

2.灵活性:消息队列可以方便地进行扩展,支持分布式系统。

3.异步处理:消息队列允许生产者与消费者解耦,提高了系统的并发能力。

4.流量削峰:消息队列可以缓存大量消息,有效解决系统瞬时流量过大的问题。

四、MQ 的缺点1.复杂性:消息队列引入了新的概念和架构,增加了系统的复杂性。

2.维护成本:消息队列需要定期进行维护,如监控、备份和恢复等。

3.学习成本:消息队列技术较为复杂,需要投入较多精力学习和掌握。

五、MQ 的未来发展随着大数据和人工智能技术的发展,消息队列在未来将发挥更大的作用。

同时,随着云计算和容器技术的普及,消息队列将更加便捷地应用于各种场景。

目录(篇2)1.MQ 的概念和作用2.MQ 的基本组件3.MQ 的使用方法4.MQ 的优点和局限性正文(篇2)一、MQ 的概念和作用消息队列(Message Queue,简称 MQ)是一种应用程序之间的通信模式,通过将消息发送到队列中,然后再从队列中读取消息,实现异步处理和解耦。

MQ企业培训教程

MQ企业培训教程
显示队列的所选属性 DISPLAY QUEUE(QNAME) DESCR GET PUT DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
显示队列管理器的所有属性 DISPLAY QMGR [ALL]
显示进程定义 DISPLAY PROCESS(PRONAME)
更改属性 ALTER QMGR DESCR(‘NEW DESCRIPTION’) ALTER QLOCAL(QNAME) PUT(DISABLED) ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
MQ企业培训教程 IBM tents
第一章 第二章 第三章 第四章
基本操作 远程连接配置 远程管理 案例演示
一.MQ基本操作
MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和 通道(Channel)。其基本的操作方法如下:
创建队列管理器 crtmqm –q QMgrName -q是指创建缺省的队列管理器
在UNIX端创建队列管理器 crtmqm –q QM_UNIX 启动队列管理器 strmqm QM_UNIX
创建接收方通道,其名字必须与远程发送方相同 DEFINE CHANNEL(SDR_NT) CHLTYPE(RCVR) REPLACE 创建本地队列 DEFINE QL(Q_UNIX) DEFPSIST(YES) REPLACE 创建服务器连接通道 DEFINE CHANNEL(S_UNIX) CHLTYPE(SVRCONN) REPLACE
创建接收方通道 DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
创建服务器连接通道 DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE

RabbitMQ入门到精通_余胜军版笔记

RabbitMQ入门到精通_余胜军版笔记

RabbitMQ⼊门到精通_余胜军版笔记原视频链接:MQ架构设计原理什么是消息中间件消息中间件基于队列模型实现异步/同步传输数据作⽤:可以实现⽀撑⾼并发、异步解耦、流量削峰、降低耦合度。

在了解中间件之前,我们先了解⼀下什么是同步?⾸先我们想⼀下,两个公司之间如果有互相调⽤接⼝的业务需求,如果没有引⼊中间件技术,是怎么实现的呢?⽤户发起请求给系统A,系统A接到请求直接调⽤系统B,系统B返回结果后,系统A才能返回结果给⽤户,这种模式就是同步调⽤。

所谓同步调⽤就是各个系统之间互相依赖,⼀个系统发送请求,其他系统也会跟着依次进⾏处理,只有所有系统处理完成后对于⽤户来讲才算完成了⼀次请求。

只要其他系统出现故障,就会报错给⽤户。

那么引⼊中间件后,是如何做到异步调⽤的呢?⽤户发起请求给系统A,此时系统A发送消息给MQ,然后就返回结果给⽤户,不去管系统B了。

然后系统B根据⾃⼰的情况,去MQ中获取消息,获取到消息的时候可能已经过了1分钟甚⾄1⼩时,再根据消息的指⽰执⾏相应的操作。

那么想⼀想,系统A和系统B互相之间是否有通信?这种调⽤⽅式是同步调⽤吗?系统A发送消息给中间件后,⾃⼰的⼯作已经完成了,不⽤再去管系统B什么时候完成操作。

⽽系统B拉去消息后,执⾏⾃⼰的操作也不⽤告诉系统A执⾏结果,所以整个的通信过程是异步调⽤的。

说到这⾥,我们可以做个总结,消息中间件到底是什么呢?其实消息中间件就是⼀个独⽴部署的系统。

可以实现各个系统之间的异步调⽤。

当然它的作⽤可不⽌这些,通过它可以解决⼤量的技术痛点,我们接下来会进⾏介绍。

消息中间件,总结起来作⽤有三个:异步化提升性能、降低耦合度、流量削峰。

异步化提升性能先来说说异步化提升性能,上边我们介绍中间件的时候已经解释了引⼊中间件后,是如何实现异步化的,但没有解释具体性能是怎么提升的,我们来看⼀下下边的图。

没有引⼊中间件的时候,⽤户发起请求到系统A,系统A耗时20ms,接下来系统A调⽤系统B,系统B耗时200ms,带给⽤户的体验就是,⼀个操作全部结束⼀共耗时220ms。

MQ知识技能培训

MQ知识培训Ver0.91一、MQ基本知识介绍MQ是IBM的消息中间件,主要为不同平台或软件提供可靠、异步、不重复的消息传送。

而且它支持多种通讯协议,在MQ网关的支持下,也能实现网络间的传输。

现在MQSeries已经作为IBM的Websphere产品的一部分,称为Websphere MQ。

1、Messages(消息)消息就是一系列字节,为各种应用程序所使用。

对于MQ而言,Message(消息)包括2部分,应用程序写入的消息数据部分以及MQ增加的消息描述部分。

这部分描述主要包括一些优先级、目的队列。

目的队列管理器、报告等的属性值2、Queue(队列)队列就是存放消息的一个数据结构。

程序或队列管理器可从队列取出、放入消息。

通常可以定义队列存放的最大的消息数目、每条消息的最大长度。

还可以定义该队列是否允许取出或放入消息。

队列可分为本地队列(local queue)、远程队列(remote queue)和传输队列(transmit queue)。

本地队列是指队列实体存在于本地的队列管理器内的。

远程队列是指队列实体存在于别的队列管理器内的。

传输队列则是一种特殊的本地队列,其用途主要为不同队列管理器间的通讯提供一个消息存放的实体。

3、Queue Manager(队列管理器)队列管理器就是为外部的应用提供队列服务以及管理本地队列及消息发送的控制等。

4、Channel(通道)通道为队列管理器提供了通讯的基础,现在可分两种通道:消息通道和MQI通道。

消息通道为两个队列管理器间提供通讯的基础。

MQI通道主要为MQClient端提供访问MQServer的通讯基础。

二、MQ基本操作1、建立侦听端口在WINDOWS下面可以定义自动启动队列侦听器。

用命令行(可在多种系统下通用)的方式为:runmqlsr –t 协议名–m 队列管理器名–p 侦听端口一般默认端口为1414。

2、建立队列管理器间的消息通道双方各建立一发送方通道与接收方通道。

IBM MQ 培训教材

Page 2
IBM Software Group | WebSphere software
时间的灵活性和独立性
SOA的连通需要在应用之间提供的持久化(alwaysconnected) 的链路
可以克服SOA资源不可得或者IT系统和网络不能
举例:应用A正在向应用B发送 消息
提供服务造成的数据交互问题 接收方-应用B 繁忙或暂时不 可达或者当前 所在主机当机
上海邮政 队列管理器
队列 ( Queue ) 消息 = 消息头 + 用户数据 用户数据
Page 8
IBM Software Group | WebSphere software
消息组成 Message Component
消息 = 消息描述符 + 用户数据
消息描述符 ... 用户数据
任意 数据
– 由发送和接收程序构造解析 – 队列管理器不做解析
消息类型 Message Type
请求消息 Request message 请求消息需要应答。从客户端发往服务器的查询和更新信息往往是一条 请求消息。请求消息中应该包含回复消息的路由信息,即回复消息发往 什么地方。 回复消息 Reply message 回复消息是对请求消息的回应。请求消息中的信息决定了回应消息的目 的地。处理请求和回应的应用程序控制着消息间的关联,这种关联和队 列管理器没有关系。 报文消息 Datagram message 数据报消息是不需要回复的消息,报文消息只是一次单向的信息传送。 报告消息 Report message
Remote Queue
Transmission Queue Alias Queue Model Queue
群集传输队列
死信队列 dead letter queue 命令队列 command queue 回复队列 reply queue

接口培训资料

接口培训资料在当今数字化的时代,接口的应用越来越广泛。

无论是软件开发、系统集成,还是不同平台之间的数据交互,接口都扮演着至关重要的角色。

对于想要深入了解和掌握接口相关知识的人员来说,一份全面且易懂的培训资料是必不可少的。

一、接口的基本概念接口,简单来说,就是两个系统或者模块之间的连接部分,它规定了双方交互的数据格式、通信协议和调用方式等。

就好像两个拼图的拼接处,只有形状和尺寸匹配,才能完美地拼合在一起。

接口可以分为多种类型,比如硬件接口和软件接口。

硬件接口常见的有 USB 接口、HDMI 接口等,用于连接不同的硬件设备。

软件接口则更多地出现在程序开发中,比如 API(应用程序编程接口),它允许不同的软件组件相互通信和协作。

二、接口的重要性接口的存在有着诸多重要意义。

首先,它实现了系统的解耦。

想象一下,如果一个大系统中的各个模块之间紧密耦合,一处修改可能会引发连锁反应,导致整个系统的不稳定。

而通过接口,各个模块可以独立开发和维护,只要接口不变,内部的修改就不会影响到其他模块的正常运行。

其次,接口提高了开发效率。

开发人员不需要了解其他模块的内部实现细节,只需要按照接口的规范进行调用,就能够快速实现功能。

这就好比我们使用电器,不需要知道它内部的电路原理,只要会操作开关和按钮就行。

此外,接口还促进了系统的集成和复用。

不同的系统可以通过统一的接口进行集成,实现数据的共享和业务的协同。

同时,已经开发好的接口可以在多个项目中复用,节省开发成本和时间。

三、接口的设计原则在设计接口时,需要遵循一些重要的原则,以确保接口的可用性、稳定性和可扩展性。

1、简洁性接口应该尽量简单明了,避免复杂的参数和返回值。

过多的参数会增加调用者的负担,容易出错。

2、一致性接口的风格和规范应该保持一致,包括命名规则、参数顺序、错误处理方式等。

这样可以提高开发人员的使用体验,减少理解和使用成本。

3、稳定性接口一旦发布,就应该尽量保持稳定。

MQ入门笔记

MQ入门笔记目录MQ入门笔记 (1)一、简单的例子 (2)(一)将消息发送至本地队列 (2)(二)将消息发送至远程队列 (3)二、队列种类 (5)(一)本地队列 (5)(二)别名队列 (6)(三)远程队列 (6)(四)模型队列 (6)三、通道配置 (7)(一)Sender—Receiver (7)(二)Server—Receiver (7)(三)Server—Requester (7)(四)Sender—Requester (7)(五)自动启动通道 (7)一、简单的例子(一)将消息发送至本地队列介绍了如何在本地独立安装(该安装不与任何其它WebSphere MQ 的安装进行通信链接)上设置队列管理器QM_APPLE和队列Q1。

在设置了这些对象之后,您将使用已提供的程序amqsput把测试消息放入队列,并且使用另一个程序amqsget来验证是否已接收到该测试消息。

1.创建队列管理器1.启动WebSphere MQ 资源管理器。

2.在导航器视图中,右键单击队列管理器文件夹,然后单击新建> 队列管理器。

此时会打开创建队列管理器向导。

3.在队列管理器名称字段中,输入QM_APPLE。

4.选中设置为缺省队列管理器复选框。

5.单击下一步两次以转至向导的步骤3。

6.确保选中启动队列管理器复选框。

7.确保选中自动启动队列管理器复选框。

8.单击下一步以转至向导的步骤4。

9.确保选中创建配置用于TCP/IP 的侦听器复选框。

10.如果完成按钮不可用,则在侦听端口号字段中输入另一个端口号。

如果当前值为1414,则尝试输入1415或1416。

11.单击完成。

2.创建本地队列1.在导航器视图中,展开队列管理器文件夹。

2.展开队列管理器QM_APPLE。

3.右键单击队列文件夹,然后单击新建> 本地队列...。

此时会打开新建本地队列向导。

4.在名称字段中,输入Q1。

5.单击完成新队列Q1将显示在内容视图中,如果内容视图中未显示该队列,请单击位于内容视图顶部的“刷新”按钮。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MQ接口使用和开发培训技术组Z.X.TV 1.0内部使用版本(不正确地方请指正)税库银接口使用和开发培训 (1)一、介绍websphere MQ (1)1.MQSeries 和消息队列排队 (1)a.MQI - 一种公共应用程序编程接口 (2)b.时间无关的应用程序 (2)c.驱动处理 (2)d.数据完整性和资源保护 (2)2.传输示意图 (2)3.消息和队列 (3)a.消息 (3)b.队列 (4)c.消息的特点 (4)d.队列的特点 (4)二、WebSphere MQ server for WIN 安装 (4)1.安装流程 (4)一、安装IBM JDK (4)二、安装IES (6)三、安装服务 (7)2. 补充和关注点 (15)三、WebSphere MQ for java 的简单例子 (15)1..需要的java包 (15)2.调用的两种方式 (15)一、介绍websphere MQ1.MQSeries 和消息队列排队MQSeries 产品使应用程序可使用消息队列排队来参与消息驱动处理。

通过消息驱动处理,应用程序可以使用适当的消息排队软件产品在相同或不同平台上进行应用程序彼此之间的通信a.MQI - 一种公共应用程序编程接口MQSeries 产品实现了公共应用程序程序设计接口,即消息队列接口(MQI),它可用于应用程序运行的任何平台。

由应用程序发出的调用和它们交换的消息是通用的(common)。

这使得编写和维护应用程序比使用传统方法更容易。

它也方便了消息排队应用程序从一个平台向另一平台的移植b.时间无关的应用程序使用消息排队,发送和接收程序之间的消息交换是时间无关的。

这表示发送和接收应用程序是独立的,这样发送程序可继续处理而不必等待接收程序收到消息后发出的确认信息。

可能在发送程序发出消息时,接收应用程序正处于忙的状态。

其实,接收应用程序即便没有在运行也没有关系。

MQSeries 一直将消息保存在队列中直到它可被处理。

c.驱动处理消息驱动处理是一种应用程序设计风格。

用此风格,应用程序被分成几个分离的、不相连的功能块,每个块都有明确定义的输入和输出参数。

每个功能块是一个应用程序,通过将值放在消息,再将消息放入队列,实现输入和输出参数与其它应用程序的交换。

通过使用适当的MQSeries 编程机制,一个应用程序可因一个或多个消息到达队列而开始执行。

如果需要,程序能够在队列中的所有消息处理完后终止。

这种应用程序设计风格能比其它应用程序设计风格更快速地建立新的应用程序,或修改现存的应用程序。

d.数据完整性和资源保护MQSeries 应用程序能以非常高的一致性传送数据。

2.传输示意图IBM提供的示意图(pos机和银行接口)3.消息和队列a.消息消息两部分,消息描述符和应用程序数据。

应用程序数据的内容和结构由使用它们的应用程序来定义。

消息描述符标识消息并包含了其它控制信息或属性,如创建消息的日期和时间、消息类型及由发出消息的应用程序为消息分配的优先级b.队列在物理概念上,一个队列就是一种类型的列表,用来存储消息直到它们被应用程序取走。

队列独立于使用它们的应用程序而存在。

一个队列可以存在于:如果队列是临时的,那么保存在主存储器中如果必须保存该队列以便故障时恢复,那么保存在磁盘或类似的辅助存储器上如果正在使用队列,并且必须保存该队列以便故障时恢复,那么同时保存在上述两种存储器上每个队列属于一个队列管理器,它负责队列的维护。

队列管理器将它检索到的消息放到适当的队列中。

队列可位于您的本地系统上,这种情况下它们被称为本地队列;也可位于其它队列管理器上,这时则被称为远程队列。

在MQSeries 中,消息可被经适当授权的应用程序从队列中检索,且遵循下列检索算法:先进先出(FIFO)。

消息优先级(在消息描述符中定义)。

具有同一优先级的消息以FIFO 的原则被检索。

一个程序请求特定的消息c.消息的特点消息的大小最大消息长度消息分段引用消息d.队列的特点消息队列事件队列启动队列传输队列接受应答队列死信队列二、WebSphere MQ server for WIN 安装1.安装流程选择所有的文件安装在d盘目录下,以下所有的操作以此目录为依据。

一、安装IBM JDK此步骤可省略在光盘的Prereqs\JDK目录下,点击ibm-java2-sdk-142.exe 进行安装选择中文选择目录选择默认安装,等待结束二、安装IESIES 及为插肩式ecilpse 用来做MQ的管理用,必须在安装server之前进行选择语言下一步再下一步等待结束。

三、安装服务安装服务并没有创建Active Directory,所以查看“软件需求”处没有问题以后就可以进行安装了下一步选择为“定制”设定目录选择功能安装等待安装完成并打开管理器配置一个测试QM_APPLE配置一个队列进行JMS以及for java的设置修改JMSAdmin.config中INITIAL_CONTEXT_FACTORY以及PROVIDER_URL修改JMSAdmin.bat 配置好lib包,用来配置jndi用执行配置jndi以上为简单配置命令,详细输入命令请查看命令文档,查看当前字符集,此字符集可在安装的时候生成,或安装重新设定启动publish/subscribe代理2. 补充和关注点1.安装时候点setup出错AMQ4739,请用<Installable_Path>\setup.exe -a AMQSERVICESHIPLEVEL="2.1"三、WebSphere MQ for java 的简单例子1..需要的java包Com.ibm.mq.jar --MQ baseCom.ibm.mqjms.jar --MQ JMSCL3Export.jar --publish/subscribeCL3Nonexport.jardhbcore.jarRmm.jarConnector.jar (version 1.0)Fscontext.jar (version 1.2)Jms.jar (version 1.1)Jndi.jar (version 1.2.1)Jta.jar (version 1.0.1)Ldap.jar (version 1.2.2)Providerutil.jar (version 1.2)2.调用的两种方式通过调用MQI的方式TCP/IP连接作为MQ 的client通过调用通用接口JMS的方式连接JNDI到MQ简单的代码(采用IBM提供的java例子)JmsUtils.javapackage com.ibm.examples;import java.util.Properties;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;public class JmsUtils {private static final String CF_CLASS_NAME ="com.ibm.mq.jms.context.WMQInitialContextFactory";private static final String WMQ_URL = "localhost:1414/SYSTEM.DEF.SVRCONN";protected Context getInitialContext() throws NamingException {Properties props = new Properties();props.put(Context.INITIAL_CONTEXT_FACTORY, CF_CLASS_NAME);props.put(Context.PROVIDER_URL, WMQ_URL);return new InitialContext(props);}}P2Putils.javapackage com.ibm.examples;import javax.jms.JMSException;import javax.jms.Queue;import javax.jms.QueueConnection;import javax.jms.QueueConnectionFactory;import javax.naming.Context;import javax.naming.NamingException;public class P2PUtils extends JmsUtils {private static final String QCF_NAME = "SampleQCF";private static final String QUEUE_NAME = "SampleQueue";public QueueConnection getConnection()throws NamingException, JMSException {Context context = getInitialContext();QueueConnectionFactory qcf =(QueueConnectionFactory) context.lookup(QCF_NAME);return qcf.createQueueConnection();}public Queue getQueue() throws NamingException {Context context = getInitialContext();return (Queue) context.lookup(QUEUE_NAME);}}PubSubUtils.javapackage com.ibm.examples;import javax.jms.JMSException;import javax.jms.Topic;import javax.jms.TopicConnection;import javax.jms.TopicConnectionFactory;import javax.naming.Context;import javax.naming.NamingException;public class PubSubUtils extends JmsUtils {private static final String TCF_NAME = "SampleTCF";private static final String TOPIC_NAME = "SampleTopic";public TopicConnection getConnection()throws NamingException, JMSException {Context context = getInitialContext();TopicConnectionFactory qcf =(TopicConnectionFactory) context.lookup(TCF_NAME);return qcf.createTopicConnection();}public Topic getTopic() throws NamingException {Context context = getInitialContext();return (Topic) context.lookup(TOPIC_NAME);}}StandalonePublisher.javapackage com.ibm.examples;import java.io.IOException;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import javax.jms.TopicConnection;import javax.jms.TopicPublisher;import javax.jms.TopicSession;import javax.naming.NamingException;public class StandalonePublisher {private PubSubUtils utils;private TopicConnection connection;private TopicSession session;private TopicPublisher publisher;public static void main(String[] args)throws NamingException, JMSException, IOException {StandalonePublisher publisher = new StandalonePublisher();publisher.connect();String message = "ignored";while (message.length() > 0) {byte[] input = new byte[40];System.out.print("Enter a message: ");System.in.read(input);message = (new String(input, 0, input.length)).trim();if (message.length() > 0)publisher.sendMessage(message);}publisher.disconnect();}private StandalonePublisher() {utils = new PubSubUtils();}private void connect() throws NamingException, JMSException {connection = utils.getConnection();session =connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);publisher = session.createPublisher(utils.getTopic());System.out.println("Publisher started.");}private void sendMessage(String text) throws JMSException { Message message = session.createTextMessage(text);publisher.publish(message);System.out.println("Published message <"+ text+ "> with ID <"+ message.getJMSMessageID()+ ">");}private void disconnect() throws JMSException {publisher.close();session.close();connection.close();System.out.println("Publisher stopped.");}}StandaloneReceiver.javapackage com.ibm.examples;import java.io.IOException;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.QueueConnection;import javax.jms.QueueReceiver;import javax.jms.QueueSession;import javax.jms.Session;import javax.jms.TextMessage;import javax.naming.NamingException;public class StandaloneReceiver implements MessageListener {private P2PUtils utils;private QueueConnection connection;private QueueSession session;private QueueReceiver receiver;public static void main(String[] args)throws NamingException, JMSException, IOException {StandaloneReceiver receiver = new StandaloneReceiver();receiver.connect();System.in.read();receiver.disconnect();}private StandaloneReceiver() {utils = new P2PUtils();}private void connect() throws NamingException, JMSException {connection = utils.getConnection();session =connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);receiver = session.createReceiver(utils.getQueue());receiver.setMessageListener(this);connection.start();System.out.println("Receiver started.");}public void onMessage(Message message) {try {TextMessage tMessage = (TextMessage) message;String text;text = tMessage.getText();System.out.println("Received message <"+ text+ "> with ID <"+ message.getJMSMessageID()+ ">");} catch (JMSException e) {e.printStackTrace();}}private void disconnect() throws JMSException {receiver.close();session.close();connection.stop();connection.close();System.out.println("Receiver stopped.");}}StandaloneSender.javapackage com.ibm.examples;import java.io.IOException;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.QueueConnection;import javax.jms.QueueSender;import javax.jms.QueueSession;import javax.jms.Session;import javax.naming.NamingException;public class StandaloneSender {private P2PUtils utils;private QueueConnection connection;private QueueSession session;private QueueSender sender;public static void main(String[] args)throws NamingException, JMSException, IOException {StandaloneSender sender = new StandaloneSender();sender.connect();String message = "ignored";while (message.length() > 0) {byte[] input = new byte[40];System.out.print("Enter a message: ");System.in.read(input);message = (new String(input, 0, input.length)).trim();if (message.length() > 0)sender.sendMessage(message);}sender.disconnect();}private StandaloneSender() {utils = new P2PUtils();}private void connect() throws NamingException, JMSException {connection = utils.getConnection();session =connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);sender = session.createSender(utils.getQueue());System.out.println("Sender started.");}private void sendMessage(String text) throws JMSException {Message message = session.createTextMessage(text);sender.send(message);System.out.println("Sent message <"+ text+ "> with ID <"+ message.getJMSMessageID()+ ">");}private void disconnect() throws JMSException {sender.close();session.close();connection.close();System.out.println("Sender stopped.");}}StandaloneSubscriber.javapackage com.ibm.examples;import java.io.IOException;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.Session;import javax.jms.TextMessage;import javax.jms.TopicConnection;import javax.jms.TopicSession;import javax.jms.TopicSubscriber;import javax.naming.NamingException;public class StandaloneSubscriber implements MessageListener {private PubSubUtils utils;private TopicConnection connection;private TopicSession session;private TopicSubscriber subscriber;public static void main(String[] args)throws NamingException, JMSException, IOException {StandaloneSubscriber subscriber = new StandaloneSubscriber();subscriber.connect();System.in.read();subscriber.disconnect();}private StandaloneSubscriber() {utils = new PubSubUtils();}private void connect() throws NamingException, JMSException {connection = utils.getConnection();session =connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);subscriber = session.createSubscriber(utils.getTopic());subscriber.setMessageListener(this);connection.start();System.out.println("Subscriber started.");}public void onMessage(Message message) {try {TextMessage tMessage = (TextMessage) message;String text;text = tMessage.getText();System.out.println("Received message <"+ text+ "> with ID <"+ message.getJMSMessageID()+ ">");} catch (JMSException e) {e.printStackTrace();}}private void disconnect() throws JMSException { subscriber.close();session.close();connection.stop();connection.close();System.out.println("Subscriber stopped.");}}。

相关文档
最新文档