`

ActiveMQ JMS 实例

    博客分类:
  • JMS
阅读更多
由于项目需要,我们要用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 QueueTopic
SessionQueueSession TopicSession
MessageProducer QueueSenderTopicPublisher
MessageConsumerQueueReceiverTopicSubscriber


以下是对这些接口的简单描述
  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
分享到:
评论
1 楼 wo_niu 2014-01-15  
学习了···

相关推荐

    activeMQ-JMS实例

    总结来说,"activeMQ-JMS实例"是一个基于Spring MVC的示例,它演示了如何使用Spring的JMS支持与ActiveMQ结合,实现消息的发送和接收。这个实例对于学习和理解JMS以及如何在实际项目中应用它是很有帮助的。通过这个...

    ActiveMQ开发实例-1

    ActiveMQ 是一个开源的消息中间件,由 Apache 软件基金会开发,它遵循开放消息传递协议(Open Message Broker Protocol)标准,支持多种消息协议,如 STOMP、AMQP、MQTT 和 JMS。本实例主要针对 ActiveMQ 的 C++ ...

    JMS-ActiveMQ入门实例

    **JMS与ActiveMQ入门实例详解** Java消息服务(Java Message Service,简称JMS)是Java平台中用于创建、发送、接收和阅读消息的应用程序接口。它为应用程序提供了标准的接口,可以跨越多种消息中间件产品进行通信。...

    activeMQ JMS 3种创建方式

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它实现了Java消息服务(JMS)标准,为分布式系统提供高效、可靠的消息传递。在ActiveMQ中,有三种主要的方式来创建消息队列(QUEUE)和主题(TOPIC),这些...

    ActiveMq-JMS简单实例

    **ActiveMQ-JMS简单实例** ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它实现了Java消息服务(Java Message Service,简称JMS)规范。JMS是一种标准接口,用于在分布式环境中传递消息,使得应用程序之间...

    ActiveMQ开发实例-6

    ### ActiveMQ开发实例核心知识点解析 #### 一、ActiveMQ简介 **ActiveMQ**是由Apache组织维护的一个开源项目,作为一款高性能的消息中间件,它在众多消息传递系统中脱颖而出。ActiveMQ不仅支持JMS 1.1和J2EE 1.4...

    ActiveMq-JMS好用实例详解

    ### ActiveMQ-JMS好用实例详解 #### 一、ActiveMQ简介及特点 **ActiveMQ** 是一个非常流行的开源消息中间件,它基于 **Java消息服务(JMS)** 规范,能够提供高度可靠的消息传递机制。ActiveMQ 以其丰富的功能集、...

    一个jms activemq Topic 消息实例

    一个jms activemq Topic 消息实例 关于jms JMS 是接口,相当于jdbc ,要真正使用它需要某些厂商进行实现 ,即jms provider 常见的jms provider 有 ActiveMQ JBoss 社区所研发的 HornetQ (在jboss6 中默认即可以...

    ActiveMQ开发实例-5

    **ActiveMQ开发实例-5** Apache ActiveMQ是业界广泛使用的开源消息代理,它遵循Java Message Service (JMS) 规范,提供可靠的消息传递服务,适用于多种编程语言,包括C++和MFC(Microsoft Foundation Classes)环境...

    activemq入门实例,有源代码

    Apache ActiveMQ是一个开源的消息中间件,它遵循Java Message Service (JMS) 规范,用于在分布式系统中传输消息。ActiveMQ提供了高可靠性和高性能的特性,使得它成为企业级应用广泛采用的消息传递平台。本实例将帮助...

    ActiveMq-JMS简单实例使用tomcat.pdf

    【ActiveMQ-JMS简单实例使用Tomcat】是一个关于如何在Tomcat环境下集成并使用ActiveMQ进行JMS消息传递的初级教程。ActiveMQ是一款开源的消息中间件,它遵循JMS(Java Message Service)1.1规范,能兼容J2EE1.4及以上...

    ActiveMQ开发实例-2

    在ActiveMQ中,消息传递遵循JMS(Java Message Service)规范,它为应用程序提供了一种标准接口,用于在不同的应用程序之间交换消息。即使这些应用程序可能运行在不同的操作系统或编程语言环境下,如这里的C++与...

    ActiveMQ实例

    在实现这些实例时,我们需要配置ActiveMQ服务器,创建相应的生产者和消费者,并理解JMS API的使用。以下是一些关键概念: - **生产者(Producer)**:负责创建和发送消息到消息队列或主题。 - **消费者(Consumer)...

    Spring+ActiveMQ整合实例代码工程

    本实例代码工程"Spring+ActiveMQ整合实例代码工程"正是结合两者,展示了如何在Spring环境中配置并使用ActiveMQ进行消息传递。 首先,我们需要了解Spring与ActiveMQ整合的基本概念。Spring框架提供了对多种消息...

    JMS-activemq 实例(分ppt,eclipse工程,说明三部分)

    在这个实例中,`JMS-activemq` 提供了三种不同的组成部分: 1. **PPTX文件(activemq.pptx)** - 这通常是一个演示文稿,详细介绍了JMS和ActiveMQ的基础知识、工作原理以及如何使用它们。它可能包含概念解释、架构...

    ActiveMq-JMS简单实例使用tomcat.doc

    在本文中,我们将探讨如何在Tomcat服务器上设置和使用ActiveMQ的简单实例。 **一、ActiveMQ的特点与优势** 1. **遵循JMS1.1规范**,兼容J2EE1.4及以上版本。 2. **跨平台**,可以在任何JVM和大多数Web容器中运行,...

    Spring整合ActiveMQ简单实例

    **Spring 整合 ActiveMQ 简单实例** 在当今的分布式系统中,消息队列(Message Queue)作为异步处理、解耦组件的关键技术,被广泛应用。Spring 框架与 ActiveMQ 的整合,使得开发者能够轻松地在 Spring 应用程序中...

    Activemq入门实例.pdf

    Apache ActiveMQ是一个开源的消息代理,遵循Java消息服务(JMS)规范,用于在不同的应用和平台之间进行可靠的消息传递。ActiveMQ能够支持多种传输协议,并能够处理大量消息的存储和转发。 从文件【部分内容】中,...

Global site tag (gtag.js) - Google Analytics