初识ActiveMQ

初识ActiveMQ

    要了解ActiveMQ,先得了解JMS的概念,JMS(JavaMessageService)是Java提供的消息中间件的一组规范接口,ActiveMQ则是Apache遵循JMS规范实现的消息中间件。

    一、JMS的优点

    早在没有JMS的时候,应用系统通信存在如下缺陷:

  1. 应用系统通信具有同步性,发送方需要等待接收方处理才能继续进行;
  2. 发送方接收方的生命周期相互依赖,如果接收方发生故障,发送方也会异常报错;
  3. 只能点对点通信,无法实现一对多的通信;

    JMS很好地解决了以上的问题:

  1. JMS提供了一个消息服务器,发送方将消息发送给消息服务器,消息服务器将其存放于队列/主题中,等到接收方合适的时候,消息服务器将消息转发给接收方,于是,发送与接收就是异步的了。
  2. 消息发送方和消息接受方都面向于消息服务器,根本不需要理会对方的存在,也就不存在生命周期的耦合。
  3. 同时,JMS提供发布订阅模式,能够实现一对多的消息发送。

    二、ActiveMQ的实现

    ActiveMQ是JMS的实现,所以自然需要遵循JMS的规范,我们来简单了解下JMS定义的内容:

Provider/MessageProvider生产者/消息生产者
Consumer/MessageConsumer消费者/消息消费者
PTP/PointToPoint点对点通信模型
Pub/Sub发布订阅通信模型
Queue队列,目标类型之一,与PTP相对应
Topic主题,另一目标类型,与Pub/Sub相对应
ConnectionJMS客户端与JMS消息中间件的连接
ConnectionFactory连接工厂
SessionConnection创建会话,实际上就是发送接收消息的一个线程
Destination消息目的地,指向某一个队列或者某一个主题,由Session创建

    三、ActiveMQ的HelloWorld实例

    接下来我们按部就班地写一个HelloWorld的实例。

    ActiveMQ的官网地址是http://activemq.apache.org/,此处我们先使用其中的windows版本,目录结构如下:


    bin中包含了启动文件,activemq.bat,只要配置了JAVA_HOME就可以直接启动。

    config存放了jetty.xml和activemq.xml,可以配置有关ActiveMQ的配置信息,如ActiveMQ控制台登录的用户名和密码,和ActiveMQ的持久化方式。

    再如图启动bat文件:


    如此,我们就可以开始敲Java代码了(为了保证代码的完整性,笔者将在注释中解释代码):

package lfq.ima;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class Sender {
    public static void main(String args[]) throws Exception
    {
        //第一步:创建连接工厂,其中的构造方法传入用户名密码,以及消息中间件的URL和通信端口号
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                "admin","admin","tcp://localhost:61616"
        );
        //第二步:创建并打开连接
        Connection connection = connectionFactory.createConnection();
        connection.start();
        //第三步:创建会话,其中第一个参数为是否开启事务
        Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
        //第四步:指定一个“目的地”,此处目的地为队列,传入一个String类型的参数作为其名字
        Destination destination = session.createQueue("quque1");
        //第五步:会话根据目的地创建消息提供者
        MessageProducer messageProducer = session.createProducer(destination);
        messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        //第六步:定义消息类型
        TextMessage textMessage = session.createTextMessage();
        for (int i = 0;i<1000;i++)
        {
         textMessage.setText("helloworld!"+i);
         messageProducer.send(textMessage); 
        }   
         //最后:关闭连接 
        if(connection!=null) { connection.close(); } }}

    上文在创建Session时,第一个参数为是否开启事务,第二个参数为签收模式,此处写的是自动签收,但是一共定义有三种签收模式。


    何为签收,就是消费者在接到消息后,告诉消息中间件已经收到消息,消息则失效。

    自动签收意味着消费者在收到消息后,即调用receive(),便自动告诉中间件,已签收。

    第二个为客户端显示的调用acknowledge()方法确定签收。

    第三个为签不签收无所谓,只要客户端能忍耐接收到重复消息,或者已经消费的消息被其他消费者消费就可以。

    通常我们会选择第二个模式,因为有些时候收到消息不代表着结束,只有当一段业务逻辑真的结束以后,再签收,才是最可靠的。

    生产者的send方法有多个重载,用于设置是否持久化消息,以及消息的失效时间,还有消息的优先级(消息的优先级只是理论的概念,并不能保证优先级高的消息优先被消费者消费)

    

混合动力汽车(HEV)模型的Simscape模型(Matlab代码、Simulink仿真实现)内容概要:本文档介绍了一个混合动力汽车(HEV)的Simscape模型,该模型通过Matlab代码和Simulink仿真工具实现,旨在对混合动力汽车的动力系统进行建模与仿真分析。模型涵盖了发动机、电机、电池、传动系统等关键部件,能够模拟车辆在不同工况下的能量流动与控制策略,适用于动力系统设计、能耗优化及控制算法验证等研究方向。文档还提及该资源属于一个涵盖多个科研领域的MATLAB仿真资源包,涉及电力系统、机器学习、路径规划、信号处理等多个技术方向,配套提供网盘下载链接,便于用户获取完整资源。; 适合人群:具备Matlab/Simulink使用基础的高校研究生、科研人员及从事新能源汽车系统仿真的工程技术人员。; 使用场景及目标:①开展混合动力汽车能量管理策略的研究与仿真验证;②学习基于Simscape的物理系统建模方法;③作为教学案例用于车辆工程或自动化相关课程的实践环节;④与其他优化算法(如智能优化、强化学习)结合,实现控制策略的优化设计。; 阅读建议:建议使用者先熟悉Matlab/Simulink及Simscape基础操作,结合文档中的模型结构逐步理解各模块功能,可在此基础上修改参数或替换控制算法以满足具体研究需求,同时推荐访问提供的网盘链接获取完整代码与示例文件以便深入学习与调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值