JMS消息服务介绍和使用场景

什么是JMS

JMS : Java Message Service(Java消息服务),Java平台中关于面向消息中间件的接口. 重点在于接口,接口就意味着与JDBC类似,仅仅有声明,没有实现,具体的实现交给厂商. 接口本身是一种与厂商无关的API.

使用场景

每一种技术都有其产生的原因和解决的问题,消息服务的使用场景如下:

  • 核心应用:

    • 解耦: 订单 --> 物流 (降低工程间的强依赖程度)
    • 异步: 用户注册 --> 发送邮件,初始化信息 (耗时长非必须的业务抽离,放在空闲的时候处理)
    • 流量削峰: 秒杀,日志处理 (针对突发情况的大访问量场景)
  • 跨平台, 多语言
  • 分布式事务, 最终一致性 (引入和分布式和微服务之后,事务的处理和数据的一致是比较难保证的一个方面)
  • RPC调用上下游对接,数据源变动通知下属

消息中间件常见概念与编程模型

常见概念

  • JMS提供者: 连接面向消息中间件的,也就是JMS的接口实现, RocketMQ, ActiveMQ等. 简单的来说就是JMS接口的实现厂商提供的实现, 中间件本身.
  • Broker服务器: 接收生产消息,提供给消费者消费的程序
  • JMS生产者(Message Producer): 生产消息的服务
  • JMS消费者(Message Consumer): 消费消息的服务
  • JMS消息: 数据对象, 传递的内容
  • JMS队列: 存储待消费信息的区域(可以简单的理解为数据结构中的队列,可以保证顺序,存储消息的介质)
  • JMS主题(Topic): 一种支持发送消息给多个订阅者的机制(中转,不同的生产者发送消息到主题,经过服务器分发到不同的订阅者)
  • JMS消息通常的两种类型: 点对点(Point-to-Point), 发布/订阅(Publish/Subscribe). 区别在于前者是多个消费者但只有一个消费者可以消费消息,后者是多个消费者都可以同时消费一个消息.

一个消息对应一个主题,一个主题下由多个queue. 要注意的是topic是一个逻辑管理单位,queue是物理管理单位

我是这么理解的: Producer发送Message到Broker,Topic在Broker内, Queue在Topic内, Message经过Broker发送给Consumer

基础编程模型

  • MQ中需要用到的一些类

    • ConnectionFactory: 连接工厂, JMS使用它来创建连接
    • Connection: JMS客户端到JMS Provider的连接
    • Session: 一个发送或接收消息的线程
    • Destination: 消息的目的地; 消息发送给谁(Broker)
    • MessageConsumer / MessageProducer: 消息消费者 / 消息生产者

主流消息队列与选型

对比

  • ActiveMQ: http://activemq.apache.org/

    • 支持多种语言的客户端和协议,基于JMS Provider的实现,容易上手. 但是吞吐量不高,多队列的时候性能会下降,存在消息丢失情况.
  • Kafka: http://kafka.apache.org/
    • 由Scala和Java编写,可以处理大规模的网站中的所有动作流数据(网页浏览,搜索等),保证数据尽量不丢失,适用于大数据领域(电商等). 但是不支持批量个广播消息,运维难度大,文档少,需要掌握Scala
  • RabbitMQ: http://www.rabbitmq.com/
    • 开源的AMQP实现,服务端用Erlang语言编写,支持多种客户端,在易用性,扩展性和高可用性等方面表现不错. 但是使用Erlang语言开发,阅读和修改源码难度大.(当然公司如果大部分人熟悉Erlang语言的话例外)
  • RocketMQ: http://rocketmq.apache.org/
    • 阿里开源的一款消息中间件,纯java开发,具有高吞吐量,高可用性,是和大规模分布式系统应用的特点,性能强劲(零拷贝技术),支持海量堆积,支持指定次数和时间间隔的失败消息重发,支持consumer端tag过滤,延迟消息等,是和电商,金融等领域. 但是也正是因为太强大了,所以不是很容易上手.

还有更多的了解参考: http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/https://www.jianshu.com/p/453c6e7ff81c

01---JMS与消息中间件的基本概念的更多相关文章

  1. 2021年3月-第01阶段-Linux基础-Linux系统概念-Linux命令

    Linux系统基本概念 图形界面: Ctrl+Shift +号 //调整命令终端变大 Ctrl - 号 //调整命令终端变小 命令终端: ~ 家目录:用户的私有场所,其他用户不能随便访问 root超级 ...

  2. Day5 - 01 函数及函数的调用概念

    函数就是最基本的一种代码抽象的方式.函数只需写一次,就可以多次调用.Python本身内置了很多有用的函数,可以直接调用. 调用函数    要调用一个函数,需要知道函数的名称和参数.可以通过help(x ...

  3. 深入浅出 JMS(一) - JMS 基本概念

    深入浅出 JMS(一) - JMS 基本概念 一.JMS 是个什么鬼 JMS 是 Java Message Service 的简称,即 Java 消息服务.什么是消息服务呢,我们来看一下 Oracle ...

  4. 理解面向消息中间件及JMS 以及 ActiveMQ例子

    为了帮助你理解ActiveMQ的意义,了解企业消息传送背景和历史是很重要的.讨论完企业消息传送,你将可以通过一个小例子了解JMS及其使用.这章的目的是简要回顾企业消息传送及JMS规范.如果你已经熟悉这 ...

  5. 深入浅出JMS(一) JMS基本概念

    摘要:The JavaMessage Service (JMS) API is a messaging standard that allows application components base ...

  6. 深入浅出JMS(一)--JMS基本概念

     from:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 深入浅出JMS(一)--JMS基本概念 标签: jmsmessagin ...

  7. 理解面向消息的中间件和 JMS

    本章知识点: 企业消息和面向消息的中间件 理解 Java Message Service(JMS) 使用 JMS APIs 发送和接收消息 消息驱动 bean 的一个例子 简介 一般来说,掌握了企业级 ...

  8. JMS介绍入门大白话版

    以下内容转自: http://setting.iteye.com/blog/1097767 ------------------------------------------------------ ...

  9. java jms

    这篇博文我们主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤. 基本概念 JMS是java ...

随机推荐

  1. 手机H5移动端WEB资源整合之meta标签

    一.相关网站使用meta的实例 youku首页的Meta设置: <meta charset="utf-8"> <meta http-equiv="X-U ...

  2. 5分钟入门自动化测试——你应该学会的Postman用法(2)

    前言 之前的一篇文章<你应该学会的Postman用法>,主要介绍了postman的一些高级的用法,便于日常开发和调试使用,本文的基础是对postman的基本使用以及一些高级用法有一定的了解 ...

  3. C#_委托的使用

    C#基础---委托的使用   一:什么是委托     委托是一种定义方法签名的类型当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法.委托是一个引用类型,所以它具 ...

  4. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  5. jsonrpc环境搭建和简单实例

    一.环境准备 下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq  访问密码 6a50 二.新建一个web工程,jsonrpc-1.0.jar复制到 ...

  6. java_web—JSP+Servlet+JavaBean

    JSP -> Java Server Page  后端 jsp -> JavaScript  前端 JSP语法 1.JSP插入Java代码 三种形式: (1)<%!  %> ( ...

  7. JS平滑无缝滚动实现———实现首页广告自动滚动效果(附实例)

    本文我们实现纯JS方式的滚动广告效果. 先show一下成品: 首先是网页样式: 1. #demo { 2. background: #FFF; 3. overflow:hidden; 4. borde ...

  8. [自学]Docker system 命令 查看docker镜像磁盘占用情况 Docker volume 相关

    内容From https://docs.docker.com/engine/reference/commandline/system_df/ docker的image和docker的container ...

  9. MES方向准备

    与WMS系统对接,实现MES系统中原材料入库.采购退货.生产订单.原材料出库.成品入库单.完工报告.成品出库单.成品入库单.成品出库单.标准出货.出货计划等数据与单据作业数据同步. 车间立体仓库.AG ...

  10. 查询数据SELECT 之单表查询

    一.单表查询的语法与关键字的执行优先级""" # 单表查询# 单标查询完整与法:# select distinct(关键字,代表查询的意思,后面跟)字段1,字段2...( ...