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实例代码的更多相关文章

  1. JMS和消息驱动Bean(MDB)

    一.说明 本示例使用的ActiveMQ作为消息中间件,服务器为Glassfish,使用JMS发送消息,在MDB接收到消息之后做打印输出. 二.ActiveMQ安装配置 1.安装console war包 ...

  2. EJB_开发消息驱动bean

    开发消息驱动bean Java消息服务(Java MessageService) Java 消息服务(Java Message Service,简称 JMS)是用于访问企业消息系统的开发商中立的API ...

  3. EJB3.0 EJB开发消息驱动bean

    (7)EJB3.0 EJB开发消息驱动bean JMS 一: Java消息服务(Java Message Service) 二:jms中的消息 消息传递系统的中心就是消息.一条 Message 由三个 ...

  4. 消息驱动bean(MDB)实例

    到眼下为止前面介绍的有关JavaEE的东西都是同步的.也就是说调用者调用某个方法.那么这种方法必须马上运行并返回运行结果. 用官方一些的语言来说就是"client通过业务接口调用一个方法,在 ...

  5. Intellij IDEA 创建消息驱动Bean - 接收JMS消息

    除了同步方式的调用之外,有时还需要异步调用,用来处理不需要即时处理的信息,例如短信.邮件等,这需要使用EJB中的独特组件——消息驱动Bean(Message-Driven Bean,MDB),它提供了 ...

  6. 菜鸟调错(二)——EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

    在部署EJB的消息驱动Bean时遇到了如下的错误: ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2 ...

  7. 消息驱动Bean

    消息驱动bean是专门用来处理基于消息请求的组件.MDB负责处理消息,而EJB容器则负责处理服务(事务,安全,并发,消息确认等),使Bean的开发者集中精力在处理消息的业务逻辑上. 消息驱动Bean. ...

  8. Linux 设备驱动开发 —— platform设备驱动应用实例解析

    前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...

  9. VS 2015 开发Android底部导航条----[实例代码,多图]

      1.废话背景介绍  在Build 2016开发者大会上,微软宣布,Xamarin将被整合进所有版本的Visual Studio之中. 这也就是说,Xamarin将免费提供给所有购买了Visual ...

随机推荐

  1. div自适应布局

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="OnlineShowPage ...

  2. python征程3.0(python对象)

    1.python使用对象模型来存储数据.构造任何类型的值都是一个对象.”尽管python被当成一种面向对象的脚本的编程语言“,但你完全能够写出不使用任何类和实例的脚本. python对象都拥有三个特性 ...

  3. (原)3.3 Zookeeper应用 - 负载均衡

    本文为原创文章,转载请注明出处,谢谢 负载均衡 1.原理 服务端启动创建临时节点(下图中servers下节点),临时节点数据包含负载信息 客户端启动获取服务器列表,并根据负载去连接一个负载较轻的服务器 ...

  4. [Cordova] Plugin里使用iOS Framework

    [Cordova] Plugin里使用iOS Framework 前言 开发Cordova Plugin的时候,在Native Code里使用第三方Library,除了可以加速项目的时程.也避免了重复 ...

  5. C#枚举、结构、数组、排序

  6. AMD and CMD are dead之JS工程化终极解决方案KMD.js版本0.0.1发布

    回顾 经过两天晚上疯狂的开发调试,伴随着大量掉落的头发和酸痛的颈椎,KMD.js赢来了第一个稳定版本.在此期间KMD规范也有所修改和完善. 这两天主要完成的功能有: 按需加载 版本控制 模块管理 便捷 ...

  7. 关于腾讯云ubuntu服务器tomcat访问慢问题

    在腾讯云上配了个一元的学生云,开始一切正常,直到配置tomcat开始出现各种莫名其妙的问题.最莫名其妙的是tomcat启动了,端口也 正常监听,安全组也放行端口了,然后问题来了. 用浏览器访问tomc ...

  8. MySQL外键与外键关系说明(简单易懂)

    MySQL主键和外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后 ...

  9. Centos6_64 rpm打包实践

    安装rpmbuild sudo yum install rpm-build 普通用户的配置 /home/you/rpmbuild/ 假设是要构建rpm的目录 先说说rpmbuild有什么用,给一个例子 ...

  10. Android进度条学习

    自定义属性 <!-- roundColor 圆环的颜色 roundProgressColor 进度的颜色 roundWidth 圆环的宽度 textColor 文字颜色 textSize 文字大 ...