3.开发Java消息驱动bean实例代码
java消息服务(JMS)是用于访问企业消息系统的开发商中立的API。企业消息系统可以协助应用软件通过网络进行消息交互。
应用程序A发送一条消息到消息服务器的某个目的地(Destination),然后消息服务器把消息转发给应用程序B。程序A和程序B没有直接的代码关联,两种实现了解偶。 消息传递系统的中心就是消息,一条Message由三个部分组成:头,属性,主体
消息有下面几种类型,他们都是派生自Message接口
StreamMessage:一种主体中包含java基元流的消息。其填充和读取均按顺序进行
MapMessage:一种主体中包含一组键值对的消息,没有定义条目顺序
TextMessage:一种主体中包含java字符串的消息(json/xml/...)
ObjectMessage:一种主体中包含序列化java对象的消息
BytesMessage:一种主体中包含字节流的消息 消息传递模型
点对点(PTP):规定了一条消息只能传递给一个接收方,采用java.jms.Queue
发布/订阅(PUB/SUB)一条消息传递给多个接收方,采用java.jms.Topic
这两个都继承自java.jms.Destination 用途
支持异步通信、消息produce和recept松耦合
发送者把消息发送到服务器的消息队列中,接收者一一进行处理
此功能可以用在不着急将结果返回给用户的情况下,如发送电子邮件等,有助于减缓服务器的压力,尤其是在高并发的情况下。
1.配置消息目标地址
将此配置文件放入jboss-4.2.3.GA\server\default\deploy目录下,名字为 ***-service.xml(以-service.xml结尾)
<?xml version="1.0" encoding="UTF-8"?>
<server>
<!--配置点对点消息传送模型(Queue)-->
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=myQueue">
<!--name=myQueue:目标地址的名称,这里可能会出现因为名字起的不合理,jboss报错的情况,名字一定不要和jboss内部的冲突 -->
<!--queue/tQueue:目标地址的JDNI名称 -->
<attribute name="JNDIName">queue/tQueue</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean> <!--配置发布/订阅传递模型(Topic)-->
<mbean code="org.jboss.mq.server.jmx.Topic" name="jboss.mq.destination:service=Queue,name=myTopic">
<attribute name="JNDIName">topic/tTopic</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
</server>
新建一个普通java项目,把jboss-4.2.3.GA\client下的所有jar包导入
2.开发点对点接收者
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(
activationConfig={
@ActivationConfigProperty
(propertyName="destinationType",propertyValue="javax.jms.Queue"), //java.jms.Queue表明是点对点模式
@ActivationConfigProperty
(propertyName="destination",propertyValue="queue/tQueue") // queue/tQueue对应配置文件中的JNDI名称
}
)
public class QueueMessageDrivenBean implements MessageListener{//必须实现MessageListener接口 @Override
public void onMessage(Message msg) {
TextMessage txtmsg = (TextMessage)msg;
try{
System.out.println("Queue 获取到信息:"+txtmsg.getText());
}catch(JMSException e){
e.printStackTrace();
}
} }
3.开发发布/订阅接收者,在这里可以创建多个实现类,内容都如下所示
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(
activationConfig={
@ActivationConfigProperty
(propertyName="destinationType",propertyValue="javax.jms.Topic"),
@ActivationConfigProperty
(propertyName="destination",propertyValue="topic/tTopic")
}
)
public class TopicMessageDrivenBean1 implements MessageListener{ @Override
public void onMessage(Message msg) {
TextMessage txtmsg = (TextMessage)msg;
try{
System.out.println("topic1 获取到信息:"+txtmsg.getText());
}catch(JMSException e){
e.printStackTrace();
}
} }
到这里,两种类型的接收者已经写好了,只需要将他们打成jar包,放入jboss-4.2.3.GA\server\default\deploy目录下即可
下面开始开发发送者
在src目录下新建文件jndi.properties
内容如下 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=127.0.0.1:
点对点消息发送者
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.naming.InitialContext; public class QueueSender { public static void main(String[] args) {
QueueConnection queueConn = null;
QueueSession session = null;
try{
InitialContext ctx = new InitialContext();
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");
queueConn = queueConnectionFactory.createQueueConnection();
session = queueConn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); //javax.jms.Destination是javax.jms.Queue和javax.jms.Topic的父类
Destination destination = (Destination)ctx.lookup("queue/tQueue");
MessageProducer producer = session.createProducer(destination);
producer.send(session.createTextMessage("Queue Test ..测试。。。"));
//把消息发送到服务器上对应的jndi的消息队列中
//用于做异步,像邮件发送
System.out.println("发送完毕!");
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(session != null){
session.close();
}
if(queueConn != null){
queueConn.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
} }
发布/订阅消息发送者
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.naming.InitialContext; public class TopicSender { public static void main(String[] args) {
QueueConnection queueConn = null;
QueueSession session = null;
try{
InitialContext ctx = new InitialContext();
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");
queueConn = queueConnectionFactory.createQueueConnection();
session = queueConn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); //javax.jms.Destination是javax.jms.Queue和javax.jms.Topic的父类
Destination destination = (Destination)ctx.lookup("topic/tTopic"); MessageProducer producer = session.createProducer(destination);
producer.send(session.createTextMessage("Topic Test ..测试。。。"));
//把消息发送到服务器上对应的jndi的消息队列中
//用于做异步,像邮件发送
System.out.println("发送完毕!");
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(session != null){
session.close();
}
if(queueConn != null){
queueConn.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
} }
下面进行测试:
启动jboss,首先确保消息目标地址配置文件和消息接受者的jar包已经放入了jboss的deploy目录下
测试点对点,运行QueueSender.java
测试发布/订阅,运行TopicSender.java
测试通过。。
3.开发Java消息驱动bean实例代码的更多相关文章
- JMS和消息驱动Bean(MDB)
一.说明 本示例使用的ActiveMQ作为消息中间件,服务器为Glassfish,使用JMS发送消息,在MDB接收到消息之后做打印输出. 二.ActiveMQ安装配置 1.安装console war包 ...
- 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(MDB)实例
到眼下为止前面介绍的有关JavaEE的东西都是同步的.也就是说调用者调用某个方法.那么这种方法必须马上运行并返回运行结果. 用官方一些的语言来说就是"client通过业务接口调用一个方法,在 ...
- Intellij IDEA 创建消息驱动Bean - 接收JMS消息
除了同步方式的调用之外,有时还需要异步调用,用来处理不需要即时处理的信息,例如短信.邮件等,这需要使用EJB中的独特组件——消息驱动Bean(Message-Driven Bean,MDB),它提供了 ...
- 菜鸟调错(二)——EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常
在部署EJB的消息驱动Bean时遇到了如下的错误: ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2 ...
- 消息驱动Bean
消息驱动bean是专门用来处理基于消息请求的组件.MDB负责处理消息,而EJB容器则负责处理服务(事务,安全,并发,消息确认等),使Bean的开发者集中精力在处理消息的业务逻辑上. 消息驱动Bean. ...
- Linux 设备驱动开发 —— platform设备驱动应用实例解析
前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...
- VS 2015 开发Android底部导航条----[实例代码,多图]
1.废话背景介绍 在Build 2016开发者大会上,微软宣布,Xamarin将被整合进所有版本的Visual Studio之中. 这也就是说,Xamarin将免费提供给所有购买了Visual ...
随机推荐
- Visual Studio 2015在.NET Core RC2项目中的一个错误。
更新了.NET Core RC2 之后,VS的Web Tools更新为“Preview 1”了. 这个版本有一个问题,害我折腾了一个下午. 就是在项目界面的“依赖项 - NPM”上面错误地显示了不必要 ...
- MVC 自定义Htmlhelper扩展
在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁. 具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先 ...
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
原因分析 首先我们来看下Spring mvc 中文件上传的配置 <bean id="multipartResolver" class="org.springfram ...
- 帆布指纹识别(canvas fingerprinting)
广告联盟或许网站运营者都希望能够精准定位并标识每一个个体,通过对用户行为的分析(浏览了哪些页面?搜索了哪些关键字?对什么感兴趣?点了哪些按钮?用了哪些功能?看了哪些商品?把哪些放入了购物车等等),为用 ...
- Lind.DDD.API核心技术分享
回到目录 关于Lind.DDD框架里API框架的技术点说明 讲解:张占岭 花名:仓储大叔 主要框架:Lind.DDD 目录 关于Lind.DDD.Authorization 关于授权的原理 关于Api ...
- 十一个行为模式之访问者模式(Visitor Pattern)
定义: 提供一个作用于某对象结构(通常是一个对象集合)的操作的接口,使得在添加新的操作或者在添加新的元素时,不需要修改原有系统,就可以对各个对象进行操作. 结构图: Visitor:抽象访问者类,对元 ...
- jquery.datatables中文使用说明
http://www.cnblogs.com/taizhouxiaoba/archive/2009/03/17/1414426.html 本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方 ...
- js中兼容性问题的封装(能力检测)
所谓兼容性,就是看浏览器是否支持当前对象的属性或是方法,先通过获得页面文本内容的方式来了解兼容性,并封装函数或对象以解决此类问题. 获得页面文本内容的方式:innnerText 或textConten ...
- 关于jquery中用函数来设置css样式
关于jquery中用函数来设置css样式 2016-12-21 23:27:55 1.jquery语法 $(selector).css(name,function(index,value)) name ...
- 用Kotlin开发Android应用(II):创建新项目
这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...