博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JMS的独立使用
阅读量:5209 次
发布时间:2019-06-14

本文共 3697 字,大约阅读时间需要 12 分钟。

前言

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

Java消息服务的规范包括两种消息模式,点对点和发布者/订阅者。许多提供商支持这一通用框架。因此,程序员可以在他们的分布式软件中实现面向消息的操作,这些操作将具有不同面向消息中间件产品的可移植性。

Java消息服务支持同步和异步的消息处理,在某些场景下,异步消息是必要的,而且比同步消息操作更加便利。

Java消息服务支持面向时间的方法接收消息,时间驱动的程序设计现在被广泛认为是一种富有成效的程序设计范例。

在应用系统开发时,Java消息服务可以推迟选择面对消息中间件产品,也可以在不同的面对消息中间件切换。

JMS的独立使用

本文以Java消息服务的开源实现产品ActiveMQ为例来进行Spring整合消息服务功能的实现分析。

尽管大多数的Java消息服务的使用都会跟Spring相结合,但是,我们还是非常有必要了解消息的独立使用方法,这对于我们了解消息的实现原理以及后续的与Spring整合实现分析都非常重要。当然在消息服务的使用前,需要我们先开启消息服务器,如果是Windows系统下可以直接双击ActiveMQ安装目录bin下的activemq.bat文件来启动消息服务器。

消息服务的使用除了要开启消息服务器外,还需要构建消息的发送端与接收端,发送端主要用来将包含业务逻辑的消息发送至消息服务器,而消息接收端则用于将服务器中的消息提取并进行相应的处理。

安装及测试ActiveMQ

Windows:

 (1)下载zip压缩包

        下载地址:

        在此地址下,选择自己要使用的版本,进入到指定的文件夹下,选择zip压缩包,下载;

        由于我使用Spring版本的原因,我使用如下activemq版本:

        

(2) 将压缩包放到指定目录下,解压。

        

(3) 启动

         打开cmd,进入到%ACTIVEMQ_HOME%\bin目录下,使用命令:    

          activemq start //打开服务

        打开后有如下提示,即已正确启动:

        

(4)测试

        浏览器进入到127.0.0.1:8161,activemq控制台,可查看activemq中的各消息信息;

        用户名:admin

        密码:admin

        用户名和密码在%ACTIVEMQ_HOME%\conf中的jetty-realm.properties中配置。如下:

        

使用示例

(1)发送端实现

发送端主要用于发送消息到消息服务器,以下为发送消息测试,尝试发送三条信息到消息服务器。

import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class Sender {    public static void main(String[] args) throws Exception {        ConnectionFactory factory = new ActiveMQConnectionFactory();        Connection connection = factory.createConnection();        Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);        Destination destination = session.createQueue("myQueue");        MessageProducer producer = session.createProducer(destination);        for (int i = 0;i < 3;i++){            TextMessage message = session.createTextMessage("大家好,这是一个测试!");            Thread.sleep(3000);            producer.send(message);        }        session.commit();        session.close();        connection.close();    }}

上面的代码很容易让我们联想到数据库的实现,在代码开始需要一系列冗余但是又必不可少的用于连接的代码,而其中真正用于发送消息的代码其实很简单。

(2)接收端实现

接收端主要用于连接消息服务器并接收服务器上的消息。

import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class Receiver {    public static void main(String[]  args) throws Exception {        ConnectionFactory factory = new ActiveMQConnectionFactory();        Connection connection = factory.createConnection();        connection.start();        final Session session =connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);        Destination destination = session.createQueue("myQueue");        MessageConsumer consumer = session.createConsumer(destination);        int i = 0;        while (i < 3){            i++;            TextMessage message = (TextMessage) consumer.receive();            session.commit();            System.out.println("收到消息:" + message.getText());        }        session.close();        connection.close();    }}

(3)先开启服务端

log4j:WARN No appenders could be found for logger (org.apache.activemq.thread.TaskRunnerFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

发现是一致Run状态的。

(4)启动客户端

log4j:WARN No appenders could be found for logger (org.apache.activemq.thread.TaskRunnerFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.收到消息:大家好,这是一个测试!收到消息:大家好,这是一个测试!收到消息:大家好,这是一个测试!

发现接收到消息,测试成功。

注意:

(1)需要将ActiveMQ服务启动后才能成功。

(2)引入activemq-all-5.10.2.jar(与自己相对应的jar包)。在ActiveMQ的安装目录中。

参考:《Spring源码深度解析》 郝佳 编著:

转载于:https://www.cnblogs.com/Joe-Go/p/10312942.html

你可能感兴趣的文章
java——值传递和引用传递
查看>>
java——内存中的数组
查看>>
java——面向对象
查看>>
java类的访问修饰符
查看>>
java字节和字符的区别
查看>>
java之Lambda表达式
查看>>
java中的自动装箱和拆箱
查看>>
java之集合那些事
查看>>
java之枚举
查看>>
java异常那些事
查看>>
java泛型
查看>>
数据库SQL语句大全——最常用的SQL语句
查看>>
java多线程超详细总结
查看>>
localStorage详细总结
查看>>
Vue.js学习总结——1
查看>>
Python 学习笔记(6)— 字符串格式化
查看>>
Git的Windows安装
查看>>
Luogu3388 割点模板
查看>>
皇宫看守(树形dp)
查看>>
LuoguP1131 [ZJOI2007]时态同步
查看>>