热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从ActiveMQ认识JMS

随着分布式系统的规模和复杂度提高,往往会出现如下问题:(1)系统间同步通信,客户端发出调用后,必

           随着分布式系统的规模和复杂度提高,往往会出现如下问题:(1)系统间同步通信,客户端发出调用后,必须等到服务对象完成处理并返回结果后才能继续执行;(2)服务端和客户端强耦合,后端一旦出现故障,前台将会牵扯进来;(3)客户的一次调用只能发送给单独目标对象。在这样的环境下,面向消息的中间件就应运而生了。


      1. 什么是消息中间件?有什么特点?


       很容易理解,消息中间件,就是将程序从一个程序传送到另一个或者多个应用程序。突出的特点为:


       (1)消息异步传输,降低多系统间的耦合度


       (2)消息可靠接收,使用事务,确保接收方收到消息后才取消消息,多个消息可以组成原子事务


      2. 什么是JMS?有什么优势特性?


         JMS定义了java中访问消息中间件的接口!优势特性:


        (1)可靠性机制:只有被确认,才能成功消费。消息会话机制分为两种:一是事务性会话,事务提交,成功消费自动提交;二是非事务性会话,包含三种会话应答模式:AUTO_ACKNOWLEDGE自动确认,客户端发送和接收不需要额外操作;CLIENT_ACKNOWLEDGE,客户端接收消息后,必须调用javax.jms.Message的acknowledge方法才能确认消息消费成功;DUPS_OK_ACKNOWLEDGE允许副本确认模式,接收方应用程序方法调用从处理消息处返回,会话对象就会确认消息接收,且允许重复确认。


        (2)持久性机制:如果为persistent,即使jms provider挂了,重启,未被消费的消息任然存在,且默认情况下就是持久化存储。如果为non_persistent,则不要求JMS provider持久保存消息。


       (3)优先级机制:10个,从0到9,默认为4,但JMS Provider有时候并不会按照优先级顺序提交消息。


       (4)消息过期机制:可设置一定时间后自动过期,只有在有效时间内,消费者才可以消费消息。


       (5)本地事务:一组操作均完成后才能提交。


        3. 常用的消息队列有哪几种?各有什么优缺点?


        经常使用的JMS有ActiveMQ,RabbitMQ,RocketMQ;


        ActiveMQ是apache公司下成熟的消息中间件产品,功能齐全被大多数公司引进;社区活跃度高,也成熟,最重要的是支持的协议和java语言较多,持久化方式多种多样(包括内存,文件,数据库);但是ActiveMq不适合上千队列的应用场景。


       RabibitMQ是Erlang语言开发,并发能力强,处理性能好,管理界面丰富,在互联网公司也有大规模引用,但它不支持事务,集群无法做到动态扩展。


       RocketMQ是Alibaba公司提供,模型简单,接口易用,性能非常好,可以大量堆积消息在boker中,支持多种消费,集群消费;但是它内容较新,没有实现JMS接口,对已有系统无法兼容。在支持的协议上有自己定义的一套,部分内容未公开。



      

          


        

       


  


      


推荐阅读
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • mysql 授权!!
    为什么80%的码农都做不了架构师?MySQL的权限系统围绕着两个概念:认证-确定用户是否允许连接数据库服务器授权-确定用户是否拥有足够的权限执 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
  • 本文详细介绍了如何使用Heartbeat构建一个高可用性的Apache集群,包括安装、配置和测试步骤。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • DNS服务一、概述1.全称:Domainnamesystem(域名系统)2.作用:1)正向解析: ... [详细]
author-avatar
风云变幻1892_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有