初识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方法有多个重载,用于设置是否持久化消息,以及消息的失效时间,还有消息的优先级(消息的优先级只是理论的概念,并不能保证优先级高的消息优先被消费者消费)

    

**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值