如何在Wildfly上搭建Ibm mq的消息队列
来源:互联网 发布:四级英语网络培训机构 编辑:程序博客网 时间:2024/05/18 01:39
说到Ibm mq消息队列,我想用过WebSphere服务器的人都不陌生,也能很熟练的在Was上配置一个队列服务,但是如何在Wildfly(Jboss前身)上配置Ibm mq的消息队列,网上给的资料也少,笔者了解过Wildfly内置的消息中间件是Hornetq,要想在Wildfly应用服务器上使用mq消息中间件,那还得做些配置,下面笔者来介绍下如何在Wildfly上搭建ibm mq消息队列。
步骤一:下载wmq.jmsra-7.0.1.3.rar,放到wildfly安装目录standalone/deployments下面;
步骤二:更改standalone目录下standalone-full.xml的配置,找到如下标签<subsystem xmlns="urn:jboss:domain:resource-adapters:2.0"/>,在标签下添加如下配置:
<subsystem xmlns="urn:jboss:domain:resource-adapters:2.0">
<resource-adapters>
<resource-adapter id="wmq.jmsra-7.0.1.3.rar">
<archive>
wmq.jmsra-7.0.1.3.rar
</archive>
<transaction-support>NoTransaction</transaction-support>
<connection-definitions>
<connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/ManagedConnectionFactoryImpl" enabled="true" pool-name="ManagedConnectionFactoryImpl">
<config-property name="port">
1420
</config-property>
<config-property name="hostName">
127.0.0.1
</config-property>
<config-property name="channel">
CHANNEL1
</config-property>
<config-property name="CCSID">
1208
</config-property>
<config-property name="queueManager">
APPDEV01_QM
</config-property>
<security>
<!--不用身份验证,也就不需要在WildFly上添加application的user用户-->
<application>false</application>
</security>
<validation>
<background-validation>false</background-validation>
</validation>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/MQQueueProxy" enabled="true" use-java-context="false" pool-name="CGF_TESTQ">
<config-property name="baseQueueName">
CGF_TESTQ
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>
(注:MQ的地址根据自己的配置,生产环境下的配置谨慎使用)
另外找到<subsystem xmlns="urn:jboss:domain:ejb3:2.0">该标签的MDB配置,替换为:
<mdb>
<resource-adapter-ref resource-adapter-name="wmq.jmsra-7.0.1.3.rar"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
做好上述配置之后,就要编写Java EE的程序来进行测试了,笔者代码里面用到了Java EE7的特性,所以在项目的classpath下要导入javaee7的jar包,如果读者想单独测试下mq的连通性,笔者附件项目里面也有单独测试mq 消息发送和接收的SE程序,如下是利用JMS1.X消息传递的两个java类和一个测试的servlet:
消息发送:
import javax.annotation.Resource;import javax.ejb.Stateless;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSContext;import javax.jms.JMSException;import javax.jms.JMSRuntimeException;import javax.jms.MessageProducer;import javax.jms.Queue;import javax.jms.QueueConnectionFactory;import javax.jms.Session;import javax.jms.TextMessage;@Statelesspublic class MessageSender {@Resource(lookup = "java:jboss/ManagedConnectionFactoryImpl")private ConnectionFactory factory;// @Resource(lookup="java:jboss/exported/jms/queue/test")@Resource(lookup = "java:jboss/MQQueueProxy")Queue myQueue;public void sendMessage(String message) throws JMSException {System.out.println("工厂对象为: " + factory.getClass().getSimpleName());System.out.println("队列对象为: " + myQueue.getClass().getSimpleName());/* * try (JMSContext context = * factory.createContext("producer","producer@163")) { * context.createProducer().send(myQueue, message); }catch * (JMSRuntimeException e) { // TODO: handle exception } */Connection connection = null;try {
/**
* username和password是在通过add-user.bat添加application身份的用户
*connection = factory.createConnection("producer","producer@163");
*/
connection = factory.createConnection();} catch (Exception e) {System.out.println("创建连接对象时出了问题");e.printStackTrace();}System.out.println("连接对象为: "+connection.getClass().getSimpleName());Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);MessageProducer producer = session.createProducer(myQueue);connection.start();TextMessage textMessage = null;textMessage = session.createTextMessage(message);producer.send(textMessage);}}
消息接收:
import javax.annotation.Resource;import javax.ejb.Stateless;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSContext;import javax.jms.JMSException;import javax.jms.MessageConsumer;import javax.jms.Queue;import javax.jms.QueueConnectionFactory;import javax.jms.Session;import javax.jms.TextMessage;@Statelesspublic class MessageReceiver {@Resource(lookup="java:jboss/ManagedConnectionFactoryImpl") private ConnectionFactory factory; //@Resource(mappedName="java:jboss/exported/jms/queue/test")@Resource(lookup="java:jboss/MQQueueProxy") Queue myQueue; public String receiveMessage() { /*try (JMSContext context = factory.createContext("producer","producer@163")) { return context.createConsumer(myQueue).receiveBody(String.class, 1000); }*/ System.out.println("接收端的工厂: "+factory.getClass().getSimpleName()); System.out.println("接收端的队列: "+myQueue.getClass().getSimpleName()); String rmessage = ""; try {Connection connection = factory.createConnection();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);MessageConsumer consumer = session.createConsumer(myQueue);connection.start();TextMessage textMessage = (TextMessage) consumer.receive(5000);rmessage = textMessage.getText();} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();} return rmessage; }}
测试的Servlet:
import java.io.IOException;import java.io.PrintWriter;import javax.inject.Inject;import javax.jms.JMSException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class TestServlet */@WebServlet(urlPatterns = {"/TestServlet"})public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Inject MessageSender sender; @Inject MessageReceiver receiver; /** * @see HttpServlet#HttpServlet() */ public TestServlet() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String message = "你好,世界!";request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Application Managed JMSContext</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Application Managed JMSContext</h1>"); try {sender.sendMessage(message);} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("发送消息出了异常。。。。");return;} out.println("Message sent: " + message + "<br><br>"); out.println("Message received: " + receiver.receiveMessage()); out.println("</body>"); out.println("</html>");}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
以读取standalone-full.xml配置的方式启动服务器,访问servlet,查看MQ的消息发送和接收情况,可看到如下页面:
- 如何在Wildfly上搭建Ibm mq的消息队列
- 在IBM WebSphere MQ本地队列中存取消息
- 在IBM WebSphere MQ本地队列中存取消息
- 在IBM WebSphere MQ本地队列中存取消息
- IBM Websphere MQ _02 MQ消息队列、通道、消息的创建及传输
- IBM MQ 消息队列生僻字解决方法
- 0069 drools workbench 在wildfly上的搭建
- MQ消息流如何在JavaCompute中设置目标队列
- 在IBM MQ的queue上设置trigger
- MQ消息队列的好处
- 在Linux上安装IBM MQ
- Windows消息队列MQ的使用
- 【消息队列MQ】ActiveMq的通信方式
- MQ命令行列出消息堆积的队列
- SpringBoot对消息队列(MQ)的支持
- 消息队列MQ的使用场景
- IBM MQ出口程序在64位windows操作系统上遇到的问题
- MQ消息队列
- linux比较全3
- linux比较4
- SparseArray
- Linux操作系统下三种配置环境变量的方法
- ARM学习笔记012之mini2440上电的启动和初始化程序分析(即Bootloader分析)
- 如何在Wildfly上搭建Ibm mq的消息队列
- oracle 坏块处理脚本
- /etc/profile环境变量配置解析
- java工具代码
- Windows下,Nginx的安装和配置
- linux5比较全
- 学习WMI的心得
- hadoop2.2安装配置
- linux设备树的建立过程