一、说明
本示例使用的ActiveMQ作为消息中间件,服务器为Glassfish,使用JMS发送消息,在MDB接收到消息之后做打印输出。
二、ActiveMQ安装配置
1、安装console
war包安装到服务器不需要特殊配置,默认监听端口为61616,可通过修改activemq.xml修改默认端口,测试使用的console版本为activemq-web-console-5.5.1,当然console可以是与客户端不同的服务器,而且我们也一般都这样使用。
2、安装ActiveMq应用端
安装rar包,如果你下载的rar包中缺少slf4j-log4j12的jar包请手工加入,与安装普通的app一样,不需要特殊配置,我采用的为activemq-rar-5.5.0.rar,不同版本对服务器可能会存在兼容性问题。
3、配置服务器
依次配置如下内容:
资源适配器(Resource Adapter Config)
资源:activemq-rar-5.5.0;
线程池ID:thread-pool-1
serverurl:tcp://localhost:61616 [如果console在其他机器,请配置对应机器的IP]
连接器连接池(Connector Connection Pools)
连接池名字:jms/ConnectionFactory
资源适配器名:activemq-rar-5.5.0
连接定义:javax.jms.ConnectionFactory
连接器资源(Connector Resources)
JNDI名字:jms/ConnectionFactory
连接池名:jms/ConnectionFactory
受管对象资源(Admin Object Resources)
JNDI名:jms/JMSINBOX
资源适配器名:activemq-rar-5.5.0
资源类型:javax.jms.Queue
PhysicalName:jmsQueue
三、开发MDB(消息驱动Bean)
1、maven配置
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.ejb</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.jms</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
2、配置/WEB-INF/ejb-jar.xml (glassfish下必须配置)
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
<display-name>Ejb1</display-name>
<enterprise-beans>
<message-driven>
<display-name>MyMDB</display-name>
<ejb-name>MyMDB</ejb-name>
<ejb-class>com.wcs.TestMDB.mdb.MyMDB</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>DestinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>Destination</activation-config-property-name>
<activation-config-property-value>jmsQueue</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>MyMDB</ejb-name>
<method-name>onMessage</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
3、配置/WEB-INF/glassfish-ejb-jar.xml (glassfish下必须配置)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>MyMDB</ejb-name>
<mdb-resource-adapter>
<resource-adapter-mid>activemq-rar-5.5.0</resource-adapter-mid>
</mdb-resource-adapter>
<mdb-connection-factory>
<jndi-name>jms/ConnectionFactory</jndi-name>
</mdb-connection-factory>
</ejb>
</enterprise-beans>
</glassfish-ejb-jar>
4、消息驱动Bean代码
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; @MessageDriven(mappedName="jms/JMSINBOX", activationConfig={
@ActivationConfigProperty(propertyName="acknowledgeMode", propertyValue="Auto-acknowledge")
})
public class MyMDB implements MessageListener { public void onMessage(Message arg0) {
TextMessage msg = (TextMessage) arg0;
try {
System.out.println("Message========"+msg.getText());
} catch (JMSException e) {
System.out.println("=====Server:JMSException");
e.printStackTrace();
}
} }
四、开发JMS
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.jms</artifactId>
<version>3.0.1</version>
</dependency>
2、发送消息代码
jms方比较简单,只需要通过jndi获取到连接,然后把消息发送出去即可,下面只粘贴连接获取和发送部分,就不粘贴调用部分代码了。
public void sendMsg(String msg) throws NamingException {
String cfJNDI = "jms/ConnectionFactory";// 配置的jndi
String QUEUE_PHYSICAL_NAME = "jmsQueue";// 配置的PhysicalName
InitialContext ic = new InitialContext();
//获取到连接池
ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup(cfJNDI);
Connection connection = null;
MessageProducer producer = null;
try {
//通过连接创建会话
connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建消息
TextMessage message = session.createTextMessage();
message.setText(msg);
//创建消息队列
Queue queue = session.createQueue(QUEUE_PHYSICAL_NAME);
//发送消息
producer = session.createProducer(queue);
producer.send(message);
} catch (JMSException e) {
e.printStackTrace();
return;
} finally {
// 关闭资源
if (producer != null) {
try {
producer.close();
} catch (JMSException e) {
e.printStackTrace();
return;
}
} if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
return;
}
}
}
}
JMS和消息驱动Bean(MDB)的更多相关文章
-
消息驱动bean(MDB)实例
到眼下为止前面介绍的有关JavaEE的东西都是同步的.也就是说调用者调用某个方法.那么这种方法必须马上运行并返回运行结果. 用官方一些的语言来说就是"client通过业务接口调用一个方法,在 ...
-
Intellij IDEA 创建消息驱动Bean - 接收JMS消息
除了同步方式的调用之外,有时还需要异步调用,用来处理不需要即时处理的信息,例如短信.邮件等,这需要使用EJB中的独特组件——消息驱动Bean(Message-Driven Bean,MDB),它提供了 ...
-
EJB_开发消息驱动bean
开发消息驱动bean Java消息服务(Java MessageService) Java 消息服务(Java Message Service,简称 JMS)是用于访问企业消息系统的开发商中立的API ...
-
EJB3.0 EJB开发消息驱动bean
(7)EJB3.0 EJB开发消息驱动bean JMS 一: Java消息服务(Java Message Service) 二:jms中的消息 消息传递系统的中心就是消息.一条 Message 由三个 ...
-
消息驱动Bean
消息驱动bean是专门用来处理基于消息请求的组件.MDB负责处理消息,而EJB容器则负责处理服务(事务,安全,并发,消息确认等),使Bean的开发者集中精力在处理消息的业务逻辑上. 消息驱动Bean. ...
-
菜鸟调错(二)——EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常
在部署EJB的消息驱动Bean时遇到了如下的错误: ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2 ...
-
3.开发Java消息驱动bean实例代码
java消息服务(JMS)是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互.应用程序A发送一条消息到消息服务器的某个目的地(Destination),然后消 ...
-
EJB_消息驱动发展bean
消息驱动发展bean Java信息服务(Java MessageService) Java 信息服务(Java Message Service,简称 JMS)是用于訪问企业消息系统的开发商中立的API ...
-
jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5
上一篇我们知道了消息驱动Bean的基本用法,实际大型分布式企业应用中,往往会采用高性能的商业Queue产品,比如IBM Webshpere MQ(目前最新版本是7.5 ),下面讲解下如何在Jboss ...
随机推荐
-
【统计学习】主成分分析PCA(Princple Component Analysis)从原理到实现
[引言]--PCA降维的作用 面对海量的.多维(可能有成百上千维)的数据,我们应该如何高效去除某些维度间相关的信息,保留对我们"有用"的信息,这是个问题. PCA给出了我们一种解决 ...
-
php多进程总结
本文部分来自网络参考,部分自己总结,由于一直保存在笔记中,并没有记录参考文章地址,如有侵权请通知删除.最近快被业务整疯了,这个等抽时间还需要好好的整理一番. 多进程--fork 场景:日常任务中, ...
-
Android获取时间2
Android开发之获取系统12/24小时制的时间 时间 2014-08-19 08:13:22 CSDN博客 原文 http://blog.csdn.net/fengyuzhengfan/art ...
-
获取 CPU 序列号
function GetCpuID: string; var _eax, _ebx, _ecx, _edx: Longword; s, s1, s2: string; begin asm push e ...
-
使用 POJO 对象绑定请求参数
概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值并且支持级联属性.这一特性在日常开发过程中使用频率比较高,开发效率也高,本文主要对 POJO 对象绑定 ...
-
每天一道Java题[1]
问题:char[]与String相比,有什么优胜的地方? 回答: 针对安全保密高的信息,char[]比String做得更好.因为String是不可变得,即使你修改原先的变量,实际上也是在内存中新建一个 ...
-
沿着path路径做动画
沿着path路径做动画 路径 效果 源码 // // ViewController.m // PathAnimation // // Created by YouXianMing on 16/1/26 ...
-
Spring @Lazy
@DependsOn用于强制初始化其他Bean.可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean. @DependsOn ...
-
[翻译] FastReport ";Text"; 对象中使用表达式
文本对象的最重要的功能之一是它不仅能够显示静态文本还能显示表达式.表达式混合在正常的文本内容中,让我们看一个简单的例子,他是如何工作的.在文件对象的内容中,输入以下字符: Hello, World! ...
-
[MYSQL] 如何彻底卸载MYSQL5.x
找了这么久,只有这个可以完全卸载~~~,转自http://www.doc88.com/p-9435498025667.html