服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

was 6与websphere mq6的整合


  was 6与websphere mq6的整合

bromon原创 请尊重版权

    整合 的目的是让mq作为websphere application server的jms provider,所有的jms消息会被was转发到mq队列 中,由于mq提供了多种平台的api,因此消息的传递可以不再通过转发的方式。任何平台都可以直接连接到mq获取/发送消息,减少了跨平台消息传递中的不 确定因素。

    首先在mq中建立队列管理器、消息队列、服务器连接通道(system.def.svrconn类型的通道)。由于 was将通过client模式与mq通信,所以有身份认证的问题,需要在通道上配置mac用户标识,它的值应该是运行mq的操作系统的一个用户名称,该用 户应该具有管理员权限,推荐使用启动mq的用户名称。如果不配置该mac用户标识,那么运行was的机器必须建立一个与运行mq完全相同的用户/密码来启 动was,才能提供正确的身份信息。如果采用bindinf的传输模式,就不需要任何的认证信息,但是该模式只能适用于was和mq在同一台机器上的情 况。而且一个was环境中,只能允许一个连接工厂使用binding模式连接,所以不推荐该模式。
    假设建立起来的队列管理器为 sobeymam,ccsid为1208(unicode)或者1381(gb2312),通信端口为1414;建立的消息队列为test,ccsid为 1208(unicode);服务器连接通道为s1,mac用户标识为bromon。

    下一步是在was中建立队列连接工厂,“资源”----“jms提供者”----“websphere mq”----“websphere mq队列连接工厂”----“新建”。填写以下内容:

    名称:                        cf
    jndi名称:                    jms/cf
    队列管理器:                mam
    主机:                        运行mq的机器名或ip
    端口:                        1414(与队列管理器的侦听端口对应)
    通道:                        s1(与队列管理器的服务器连接通道对应)
    传输类型:                    client
    取消“已起用xa”选项

    连接工厂的配置完成。

    下一步是建立队列目标。“资源”----“jms提供者”----“websphere mq”----“websphere mq队列目标”----“新建”。填写以下内容:

    名称:                        test
    jndi名称:                    jms/test
    基本队列名:                test(对应mq中的本地队列)
    ccsid:                        1208
    目标客户机:                mq

     队列目标的配置完成。需要说明的是,目标客户机的值决定了jms的消息将以什么格式存放在mq中。如果是”mq”,那么消息将直接使用mqstr格式,纯 文本的存放,任何平台都能够获取消息直接显示。如果是”jms”,那么消息将使用mshrf2格式存放,java平台能够不加处理的正常识别,其他平台必 须要做转换才能正确获得消息文本。推荐使用”mq”。

    如果需要部署消息bean获取mq中的消息,那么还需要配置侦听器端口,“服务器”----“应用服务器”----“server1”----“通信”----“消息传递”----“消息侦听器服务”----“侦听器端口”----“新建”。填写一下内容:

    名称:                            test
    连接工厂jndi名:                jms/cf(对应websphere队列连接工厂的jndi)
    目标jndi名:                    jms/test(对应websphere队列目标的jndi)
    
    侦听器端口配置完成,部署消息bean时需提供该侦听器名称。

    重启websphere使配置生效。

编写一个jsp尝试发送消息:
  1. <%@ page contenttype="text/html; charset=gbk" %>
  2. <%@ page import="java.util.*"%>
  3. <%@ page import="javax.jms.*"%>
  4. <%@ page import="javax.naming.*" %>
  5. <%
  6. try
  7. {
  8.   properties p = new properties();
  9.   p.put(context.initial_context_factory,"com.ibm.websphere.naming.wsninitialcontextfactory");
  10.   p.put(context.url_pkg_prefixes, "com.ibm.ws.naming");
  11.   p.put(context.provider_url, "iiop://localhost:2809/");
  12.   initialcontext ctx = new initialcontext(p);
  13.   queueconnectionfactory qcf = (queueconnectionfactory) ctx.lookup("jms/cf");//连接工厂
  14.   queueconnection conn = qcf.createqueueconnection();
  15.   queue q = (queue) ctx.lookup("jms/test");//队列
  16.   queuesession s = conn.createqueuesession(false,queuesession.auto_acknowledge);
  17.   conn.start();
  18.   queuesender sender = s.createsender(q);
  19.   textmessage tm=s.createtextmessage("测试websphere mq有中文字符");//创建文本消息
  20.   sender.send(tm, deliverymode.persistent, 4, 0);
  21.   sender.close();
  22. }catch(exception e)
  23. {
  24.   out.println(e);
  25. }
  26. %>

扫描关注微信公众号