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 ...
随机推荐
- 记住 MVC里用formcollection接收form表单传来的值,表单属性必须有name为健!
记住 MVC里用formcollection接收form表单传来的值,input属性必须有name为健! 调了一晚上!! 写个日志记下!!
- 【JAVA并发编程实战】10、并发程序的测试
1.产生随机数 package cn.study.concurrency.ch12; public class Util { public static int xorShift(int y) { / ...
- phpstorm10.0.3破解版安装教程及汉化方法
phpstorm是一个轻量级且便捷的PHP IDE,其旨在提供用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.不但是php开发的利器,前端开发也是毫不逊色的.下面记录php ...
- 学习笔记:Asp.Net MVC更新部分页面
Asp.Net MVC 更新部分页面 设想我们有一篇文章下面的提交评论时如何只刷新评论内容部分, 方法一,利用ajax通过js代码实现. 方法二,利用Ajax.BeginForm()+部分视图实现. ...
- mariadb 10.2.3支持oracle execute immediate语法
在之前的版本包括oracle mysql/percona server版本中,所有的动态SQL都需要通过prepare执行,如下: "; execute stmt; deallocate p ...
- cocos2d-x3.3 以前版本 工程Xcode6编译时的问题
Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHa ...
- JS图片自动和可控的轮播切换特效
点击这里查看效果:http://hovertree.com/texiao/js/1.htm HTML文件代码如下: <!DOCTYPE html> <html xmlns=" ...
- JavaScript 变量
一,JavaScript 变量(存储信息的容器) 与代数一样,JavaScript 变量可用于存放值(比如 x=2)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描 ...
- iOS之APP应用图标的设置
图标是IOS程序包所必需的组成部分.如果你没有提供程序所需的各种尺寸的图标,程序上传发布时可能会无法通过验证.IOS程序为兼顾不同的应用场景,定义了多个不同规格的图标,并以不同的命名区分: IOS图标 ...
- App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file
ios进行http请求,会出现这个问题: App Transport Security has blocked a cleartext HTTP (http://) resource load sin ...