由于项目需要,我们要用JMS进行通信。于是就去网上看了一下相关的JMS。
什么是JMS?
jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
Java消息服务有两种消息模式,点对点(PTP)和发布者/订阅者(pub/sub)。
JMS主要接口如下
:
JMS Parent | PTP | Pub/Sub |
ConnectionFactory | QueueConnectionFactory | TopicConnectionFactory |
Connection | QueueConnection | TopicConnection |
Destination | Queue | Topic |
Session | QueueSession | TopicSession |
MessageProducer | QueueSender | TopicPublisher |
MessageConsumer | QueueReceiver | TopicSubscriber |
以下是对这些接口的简单描述
:
ConnectionFactory :连接工厂,JMS 用它创建连接
Connection :JMS 客户端到JMS Provider 的连接
Destination :消息的目的地
Session: 一个发送或接收消息的线程
MessageProducer: 由Session 对象创建的用来发送消息的对象
MessageConsumer: 由Session 对象创建的用来接收消息的对象
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性
。
1) StreamMessage -- Java原始值的数据流
2) MapMessage--一套名称-值对
3) TextMessage--一个字符串对象
4) ObjectMessage--一个序列化的 Java对象
5) BytesMessage--一个未解释字节的数据流
消息确认模式
非事务性会话中,应用程序创建的会话有5 种确认模式,而在事务性会话中,确认模式被忽略。
五种确认模式说明:
♣
AUTO_ACKNOWLEDGE:自动确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收。
♣
CLIENT_ACKNOWLEDGE:客户端确认模式。会话对象依赖于应用程序对被接收的消息调用一个acknowledge()方法。一旦这个方法被调用,会话会确认最后一次确认之后所有接收到的消息。这种模式允许应用程序以一个调用来接收,处理并确认一批消息。注意:在管理控制台中,如果连接工厂的Acknowledge Policy(确认方针)属性被设置为"Previous"(提前),但是你希望为一个给定的会话确认所有接收到的消息,那么就用最后一条消息来调用acknowledge()方法。
♣
DUPS_OK_ACKNOWLEDGE:允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。注意:如果你的应用程序无法处理重复的消息的话,你应该避免使用这种模式。如果发送消息的初始化尝试失败,那么重复的消息可以被重新发送。
♣
NO_ACKNOWLEDGE:不确认模式。不确认收到的消息是需要的。消息发送给一个
NO_ACKNOWLEDGE 会话后,它们会被WebLogic 服务器立即删除。在这种模式下,将无法重新获得已接收的消息,而且可能导致下面的结果:1. 消息可能丢失;和(或者)另一种情况:2. 如果发送消息的初始化尝试失败,会出现重复消息被发送的情况。
♣
MULTICAST_NO_ACKNOWLEDGE:IP组播下的不确认模式,同样无需确认。发送给一个MULTICAST_NO_ACKNOWLEDGE会话的消息, 会共享之前所述的NO_ACKNOWLEDGE 确认模式一样的特征。这种模式支持希望通过IP 组播方式进行消息通信的应用程序,而且无需依赖会话确认提供的服务质量。注意:如果你的应用程序无法处理消息的丢失或者重复,那么你应该避免使用这种模式。如果发送消息的初始化尝试失败的话,重复的消息可能会被再次发送。
其他有关于JMS的知识自己就百度好了
。下面我们来写一个例子:
准备工作:
先去
http://activemq.apache.org/download.html 下载最新版本的ActiveMQ 5.8.0 Release并解压。
在系统环境变量里面配置ACTVIEMQ_HOME和PATH。
打开cmd 输入activemq启动。
在浏览器输入http://localhost:8161/admin 看到如下界面:
ps:账号和密码是admin,admin 你也可以自己创建账号和密码,配置文件在conf/jetty-realm.properties
用户名和密码的格式是:
用户名 : 密码 ,角色名
服务端代码:
1.先创建一个接口
package com.jynine;
public interface UserService {
void getUserName(String name);
}
2.创建一个类,实现上面的接口
package com.jynine;
public class UserServiceImpl implements UserService {
public void getUserName(String name) {
System.out.println("用户名称:"+name);
}
}
3.配置server.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="myqueue"/>
</bean>
<bean id="userService"
class="org.springframework.jms.remoting.JmsInvokerServiceExporter">
<property name="serviceInterface" value="com.jynine.UserService"/>
<property name="service">
<bean class="com.jynine.UserServiceImpl"/>
</property>
</bean>
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="queue"/>
<property name="concurrentConsumers" value="3"/>
<property name="messageListener" ref="userService"/>
</bean>
</beans>
4 编写main方法
package com.jynine;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Server {
public static void main(String[] args) throws Exception {
new ClassPathXmlApplicationContext(new String[]{"com/jynine/server.xml"});
}
}
客户端代码:
1.先创建一个接口
package com.jynine;
public interface UserService {
void getUserName(String name);
}
2.配置client.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="myqueue"/>
</bean>
<bean id="userService"
class="org.springframework.jms.remoting.JmsInvokerProxyFactoryBean">
<property name="serviceInterface" value="com.jynine.UserService"/>
<property name="connectionFactory" ref="connectionFactory"/>
<property name="queue" ref="queue"/>
</bean>
</beans>
3 编写main方法:
package com.jynine;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] {"com/jynine/client.xml"});
UserService service = (UserService)ctx.getBean("userService");
service.getUserName("Test");
}
}
这样一个简单的通信都完成了
。
其他配置如JMS连接池:
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
</property>
</bean>
JNDI等等配置JMS可以自行研究。
如需例子,请留邮箱
。因为例子写在公司电脑里面的~~~O(∩_∩)O~
- 大小: 78.4 KB
分享到:
相关推荐
该例子是本人写的一个关于使用springMVC搭建的activeMQ的JSM实例,希望对学校JMS的朋友有所帮助。
一个jms activemq Topic 消息实例 关于jms JMS 是接口,相当于jdbc ,要真正使用它需要某些厂商进行实现 ,即jms provider 常见的jms provider 有 ActiveMQ JBoss 社区所研发的 HornetQ (在jboss6 中默认即可以...
ActiveMq-JMS简单实例使用tomcat.pdf
简单消息服务-httpsqs 博文链接:https://sosuny.iteye.com/blog/509846
ActiveMq-JMS简单实例使用tomcat.doc
activeMq是一个开源的支持JMS的框架:(以下为考录他人的信息,如有版权问题,请联系) 一、特性及优势 1、实现JMS1.1规范,支持J2EE1.4以上 2、可运行于任何jvm和大部分web容器(ActiveMQ works great in any ...
ActiveMq-JMS-tomcat简单实例,内有代码文档和源码
JMS-activemq 实例(分ppt,eclipse工程,说明三部分) 特别有readme说明,一看就会用 spring实现方式,可运行有jar包
activemq与spring整合发送jms消息入门实例 jar 包和实例代码都在压缩包里了
此实例基于Spring+JMS+ActiveMQ+Tomcat,注解的完整实例,包含jar包
一个ActiveMQ的实例,实现了利用ActiveMQ的点对点消息通信和互操作的功能
支持持久化的采用Spring整合activeMQ与quartz的JMS数据同步实例,包含依赖的jar包
description="JMS Connection Factory" factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="vm://shirdrnUrl" brokerName="MyActiveMQBroker"/> auth="Container" type="org....
<a href=http://activemq.apache.org/version-5-getting-started.html >http://activemq.apache.org/version-5-getting-started.html</a> <a href=http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html>...
含有八个独立运行的程序,分别设计JMS多个方面。 工程使用ActiveMQ,运行工程之前,请阅读doc.txt文档,并运行ActiveMQ
JMS、ActiveMQ入门及深入使用的例子,这些例子都是我测试的
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。...而ActiveMQ就是对JMS的实现之一。
1启动ActiveMQ 运行C:\apache-activemq-5.2.0\bin\activemq.bat 2测试 ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动 netstat -an|find "61616" C:\Documents and ...