JMS学习(一)入门及activemq简单实例

1. JMS基本认识

jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。(百度百科)
从这个介绍可以看出, jms就是用来进行消息服务和通信的。
更多关于JMS概念的东西可以百度、google

1.1 JMS的使用场景

关于JMS的使用场景,去个简单的例子,我们通常见到的站内信息,很多就是用JMS实现, 使用消息队列来实现,由于是异步的接受消息,发送消息之后就不用一直等待回信。 一个不太恰当的比喻,就像我们发送短息给别人一样,不用管他是否开机或者怎么的,等他收到信息,我们就是有提示。类似吧。
在java 中,java消息队列使用的场景可参考下面这为大神的总结,

java消息队列使用场景

1.2 JMS的技术选型

实现JMS的规范的中间件有很多, 在项目和实际开发中使用何种中间件呢,这个就要看自己的需求和团队的情况了,关于技术选型,请看下面这位大神

消息队列中间件的技术选型分析

2. 如何使用

明白了JMS是什么,能用来干什么,什么情况下用什么之后, 就该看看是如何来使用的了

这里就一activeMQ为例,本人自己学习的时候主要是学习的activeMQ,想到这里也感谢网上的朋友无私奉献自己的学习成果,才使得我对这个知识点能够有些了解。

2.1 ActiveMQ的几种通信方式

在activeMQ中主要有两种通讯方式:

  1. P2P(Point to Point,点对点模式)
  2. publish-subscribe(发布订阅模式)
  3. 使用对生产者和消费者的改造,实现request-response 请求相应模式

在p2p模式中主要是创建消息队列,一条消息被一个消费消费之后就不能再被选其他的消费者消费了
使用session.createQueue() 器模型为(以下模型图片均出自 http://shmilyaw-hotmail-com.iteye.com/blog/1897635 版权归此链接文章的作者所有,如要了解详细分析,可查看原文)
这里写图片描述

发布订阅模式,这个过程中主要是创建一个Topic,一个Topic可以被多个的消息消费这接受,使用seesion.createTopic()模型如下:
这里写图片描述

第三种的话,就是如果需要实现请求响应的方式的话, 把生产和消费者进行改造来实现,模型如下:
这里写图片描述
在JMS里面,如果要实现请求/应答的方式,可以利用JMSReplyTo和JMSCorrelationID消息头来将通信的双方关联起来。另外,QueueRequestor和TopicRequestor能够支持简单的请求/应答过程。

2.2 activeMQ实现实例

activeMQ,在我写这个笔记的时候已经发布到 5.11.0版本了,这个版本要求使用的JDK版本为1.7,我在官网看了下, 大概在5.7之后的版本都要求1.7的JDK才可以的。下面下说下activeMQ的使用步骤

  1. 在官方网站现在activemq后安装
  2. 按找doc文件夹里面的方式,命令行启动activemq
cd /安装目录/bin

activemq.bat start

执行者两条命令。启动服务器,在浏览器中查看消息控制台,输入:
http://127.0.0.1:8161/admin

3.实现消息生产者和消费者的代码

2.2.1 代码实现

按照JMS的规范,我们首先需要获得一个JMS connection factory.,通过这个connection factory来创建connection.在这个基础之上我们再创建session, destination, producer和consumer,具体步骤:

Created with Raphaël 2.1.2 导入activemq的包 获得JMS connection factory. 通过我们提供特定环境的连接信息来构造factory 利用factory构造JMS connection 通过connection创建JMS session JMS destination 创建JMS producer或者创建JMS message并提供destination 创建JMS consumer或注册JMS message listener 发送和接收JMS message 关闭所有JMS资源,包括connection, session, producer, consumer等 运行测试

一个简单代码如下:
Producer

package fun.activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
    private static final int SEND_NUMBER = 5;

    public static void main(String[] args) {
        //连接工厂
        ConnectionFactory connectionFactory;
        //消息连接
        Connection connection = null;
        //发送消息的进程
        Session session;
        //发送消息的目的地
        Destination destination;
        //消息生产者
        MessageProducer producer;

        connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        try {
            connection = connectionFactory.createConnection();
            connection.start();

            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

            destination = session.createQueue("FirstQueue");

            producer = session.createProducer(destination);

            SendMsg(session, producer);

            session.commit();

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(null!= connection)
                connection.close();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }


    }

    public static void SendMsg(Session session,MessageProducer producer) throws Exception{
        for (int i = 1; i <= SEND_NUMBER; i++) {
            TextMessage message = session
                    .createTextMessage("ActiveMq 发送的消息" + i);
            // 发送消息到目的地方
            System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);
            producer.send(message);
        }
    }

}

Consumer

package fun.activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Reciver {
    public static void main(String[] args) {
        //连接工厂
        ConnectionFactory connectionFactory;
        //消息连接
        Connection connection = null;
        //发送消息的进程
        Session session;
        //发送消息的目的地
        Destination destination;
        //消息消费者
        MessageConsumer consumer;

        connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");

        try {
            connection = connectionFactory.createConnection();
            connection.start();

            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

            destination = session.createQueue("FirstQueue");

            consumer = session.createConsumer(destination);

            while(true){
                TextMessage textMassage = (TextMessage) consumer.receive(100000);
                if(null != textMassage){
                    System.out.println("收到消息:"+textMassage.getText());
                }else{
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(null!=connection){
                    connection.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

}

以上是一个点对点的实例,点启动reciver,然后运行sender就可以进行测试

第一部分笔记就这些,下一部分摸索下activemq和spring的整合

本文参考:
http://shmilyaw-hotmail-com.iteye.com/blog/1897635

http://blog.163.com/sir_876/blog/static/11705223201332444647261/

http://blog.csdn.net/nightelve/article/details/16827465

感谢这些朋友的分享,文中引用到上面作者的内容的地方,版权归上述文章作者所有

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要开始使用ActiveMQ,您需要按照以下步骤进行安装和配置: 1. 首先,您可以从ActiveMQ的官方网站()下载安装包。您可以在此链接中找到最新的版本。 2. 下载完成后,您可以使用wget命令()将下载的安装包传输到您的Linux系统中。 3. 解压缩安装包,您可以使用tar命令()执行:tar -xzvf apache-activemq-5.14.0-bin.tar.gz。这将解压缩安装包到当前目录。 4. 进入解压缩后的bin目录,并启动ActiveMQ。您可以使用命令:./activemq start。这将启动ActiveMQ,并将其作为后台进程运行。 5. 您可以使用命令ps -ef|grep activemq检查ActiveMQ是否成功启动()。 一旦ActiveMQ成功安装并启动,您可以使用Java代码与其进行交互。以下是一些基本操作: 1. 导入ActiveMQ的依赖项。您可以在您的Java项目的pom.xml文件中添加以下依赖项(): <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.9</version> </dependency> 2. 创建队列。您可以使用ActiveMQ的API来创建一个队列,以便在消息传递中使用。 3. 创建主题。类似于队列,您也可以使用ActiveMQ的API来创建一个主题,用于发布和订阅消息。 这些是使用ActiveMQ的一些基本入门步骤。您可以通过阅读ActiveMQ的官方文档和API文档来深入了解更多功能和使用方法。希望这可以帮助您开始使用ActiveMQ。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ActiveMQ入门](https://blog.csdn.net/qq_34195507/article/details/101022427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [ActiveMQ入门学习](https://blog.csdn.net/dpf373521/article/details/101024790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值