Java Message System简介

Java消息系统

在本文中,我将讨论面向消息的中间件 (MOM)以及JMS如何在Enterprise Java中实现它。 另外,我将讨论适合JMS使用的典型用例以及用于讨论消息传递解决方案的不同术语,例如Publisher / SenderDestination / Topic / QueueSubscriber / Receiver 。 我将介绍两种消息拓扑: 点对点发布/订阅

资料存取层

在Java EE应用程序的典型体系结构中,数据访问层具有与数据存储通信的技术,例如Java Persistence API (JPA),将应用程序连接到企业信息系统(EIS)的Java Connector Architecture (JCA)。 和Java消息服务 (JMS)。

JMS的作用是什么?

JMS用于在分布式应用程序之间以松耦合异步可伸缩和安全的方式传递消息。 应用程序使用称为目的地的消息导向中间件发送和接收消息。

异步意味着消息的发送者和接收者不需要同时与消息队列交互。 因此,接收者可以在发送消息后的某个时间接收消息。

松散耦合是因为发送方对接收方一无所知,而接收方对发送方一无所知。

可扩展性意味着系统的不同部分可以根据应用程序负载以不同的速率增长。 因此,例如,如果站点上的活动突然爆发导致跨消息传递中间件发送的消息急剧增加,则可以在接收方响应或自动缩放时将消息排队。 这在系统中提供了鲁棒性,否则该鲁棒性将难以处理突然的负载,并且应用程序将开始表现异常或完全停止工作。

何时使用JMS?

何时最佳使用JMS取决于用例,但通常情况下,它将至少属于这些用例之一。

  1. 第一个用例是:应用程序应该能够发送消息,而无需立即对该消息做出响应。 可能对消息的响应是可选的,并且应用程序可以在没有响应的情况下继续其正常功能,或者这纯粹是单向通信。
  2. 其次。 发送者无需依赖接收者的接口,因此可以轻松更换接收者。 这归结为需要对应用程序的某些部分进行解耦。

当接收器关闭时,应用程序应继续运行。 接收器可能损坏,应用程序将继续其正常运行。 这允许鲁棒性。

术语

在谈论JMS时,需要了解一些有用的术语,这些术语可以帮助我们交流意图。

目的地是消息发送的目的地 ,被称为队列主题 。 通常在JMS中将其定义为字符串值。 应该给目的地指定代表其功能的名称。

JMS系统具有发布者发送者 。 这是消息的起源,而订户接收者是消息的终止。 这里使用的术语取决于消息传递系统的拓扑结构,该拓扑结构可以是点对点发布/订阅

消息 ,这些消息有一个有效负载,其中包含有用的信息,接收方将提取并处理这些有用的信息。 消息类型可以是文本,二进制,流,对象或属性映射。

点对点消息拓扑

在点对点设置中,消息的来源称为发件人,目的地称为队列。 在这里,消息被发送到单个目的地,并且接收者仅接收到消息的一个实例。 如果接收器关闭,则消息将保留在队列中,直到接收器启动并再次运行。

发布/订阅消息拓扑

在发布/订阅设置中,消息的来源称为发布者 ,目的地称为主题 。 在这里,许多订阅者可以订阅一个主题,并且每个订阅者都可以接收该消息的实例。 因此,一条消息发送给许多等待的订户 。 如果订户已关闭,则当它重新启动并再次运行时,它将不会收到消息。

进一步阅读

如何学习以下Java EE技术的知识:

  • 上下文和依赖注入 (CDI)
  • 企业Java Bean (EJB)
  • JSP,JSP和表达语言
  • RESTful Web服务
  • Java持久性API

RESTful Web服务的JAX-RS

我最近发布了一个迷你系列博客,介绍了JAX-RS 。 他们讨论:

  • 如何管理bean验证失败
  • 消费者和生产者合作 ,以及
  • 如何创建JAX-RS资源实体

关于JAX-RS主题,有两个深入的系列:

  • 什么是JAX-RS批注? 深入研究开发REST端点时最常用的注释。
  • @Context注释用于什么? 深入了解@Context批注的许多用途。

接下来是什么?

如果您是Java EE的新手,那么不知所措要绕过企业生态系统中的所有API。 这就是为什么我编写并记录了视频培训课程Learning Java Enterprise Edition的原因 。 这是一个为期两个小时的课程,向您介绍所有最重要的Java EE API。 关于如何使用Enterprise Java进行编程的大量演示,代码示例和练习任务,将使您成为Java EE开发人员时能说得很透彻。

增进知识

如果您想了解更多信息,那么有些课程将更深入地介绍每个API。 您将学习一门关于JAX-RS API的课程,通过学习如何构造RESTful端点来提高自己的知识。 WebSocket API上有一门课程,您可以学习如何开发聊天应用程序,而JSON上则有一门课程,您可以学习如何掌握JSON-Processing API课程。 即将到来的课程很多,所以为什么不现在就加入并让您的Java EE事业发展呢?

翻译自: https://www.javacodegeeks.com/2017/09/java-message-system-introduction.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FLV协议5分钟入门浅析

FLV协议简介 FLV(Flash Video)是一种流媒体格式,因其体积小、协议相对简单,很快便流行开来,并得到广泛的支持。 常见的HTTP-FLV直播协议,就是使用HTTP流式传输通过FLV封装的音视频数据。对想要了解HTTP-FLV…

问题 1049: [编程入门]结构体之时间设计

题目描述定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。输入年月日输出当年第几天样例输入2000 12 31 样例输出366 import java.util.Scanner; public class Main{ public static void main(String args[]){ …

反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化

反序列化 jacksonDatatables是一个jquery插件,用于显示表格信息–它可以增强简单的表或可以使用基于AJAX的数据并以表格形式显示信息。 数据表要​​求来自服务器的数据遵循特定的JSON格式才能在屏幕上显示。 考虑要显示Member实体列表的情况,那么Membe…

NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」

待补 引子 题解 大模拟&#xff0c;注意细节 代码1 #include<bits/stdc.h> using namespace std; int n,m;char a[1005][1005];bool vst[1005][1005]; void solve(int na,int nb) {int ina,jnb,now0;while(1){j;if(a[na][j])break;}while(1){i;if(a[i][nb])break;}for(in…

GC解释:收集器概述

当前版本的HotSpot JVM包括三种类型的垃圾收集器&#xff1a; –串行收集器 –并行收集器 –多数同时收集者 它们都是世代的&#xff0c;这意味着它们利用了堆的划分方式 。 垃圾收集器负责三个主要操作&#xff1a; –查找不再使用的对象 –释放这些对象之后的内存 –…

数据结构之排序五:选择排序

def selectedSort(myList):#获取list的长度length len(myList)#一共进行多少轮比较for i in range(0,length-1):#默认设置最小值得index为当前值smallest i#用当先最小index的值分别与后面的值进行比较,以便获取最小indexfor j in range(i1,length):#如果找到比当前值小的ind…

C#代码规范

1. 引言 本文是一套面向C# programmer 和C# developer 进行开发所应遵循的开发规范。 按照此规范来开发C#程序可带来以下益处&#xff1a; 代码的编写保持一致性&#xff0c; 提高代码的可读性和可维护性&#xff0c; 在团队开发一个项目的情况下&a…

谷歌guava_使用Google Guava进行馆藏创建和不变性

谷歌guava因此&#xff0c;我想看看番石榴提供的一些集合创建模式&#xff0c;以及它提供的某些不可变集合类型。 如果您没有看过我以前的文章&#xff0c;则可能要从这里开始&#xff1a; 番石榴第1部分– MultiMaps 番石榴第2部分– BiMaps 番石榴第3部分–多组 Guava的…

问题 1051: [编程入门]结构体之成绩统计2

题目描述有N个学生&#xff0c;每个学生的数据包括学号、姓名、3门课的成绩&#xff0c;从键盘输入N个学生的数据&#xff0c;要求打印出3门课的总平均成绩&#xff0c;以及最高分的学生的数据&#xff08;包括学号、姓名、3门课成绩&#xff09;输入学生数量N占一行每个学生的…

socket-02

# -- coding: utf-8 --_author__ "HuaQiang Yan" import socketdef handle_request(client):buf client.recv(1024) # 接收请求client.send(bytes("HTTP/1.1 200 OK\r\n\r\n", encodingutf-8))client.send(bytes("Hello World&#xff01;", …

jenkins复制作业_Jenkins分层作业和作业状态汇总

jenkins复制作业您可能知道&#xff0c;Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置詹金斯工作层次的方法。 这是用例&#xff1a; 我们有一个主要的入口工作被调用以启动整个构建过程。 这项工作可以有一个到多个子工作。 …

xaml语言建立首个win8 Metro应用,rss阅读器

本实例是来源msdn的Metro开发文档&#xff0c;按着解说一步步来理解的&#xff0c;修改了一点点&#xff0c;拿了博客园本人的博客作为RSS阅读&#xff0c;本实例用来学习还是可以的 参考文档http://msdn.microsoft.com/zh-cn/library/windows/apps/br211380.aspx#Y909 先看允…

在扩展Spock时输出给定值

Spock是一个Java测试框架&#xff0c;由GradleWare的软件工程师Peter Niederwieser于2008年创建&#xff0c;它可以促进BDD的发展。 利用这个 例如 &#xff0c;一个故事可以定义为&#xff1a; Story: Returns go to stockAs a store owner In order to keep track of stock…

wsgi

wsgi&#xff0c;通用网关接口。相当于在app与web服务&#xff08;socket服务端&#xff09;之间建立统一连接的规范。 真实开发中的python web程序来说&#xff0c;一般会分为两部分&#xff1a;服务器程序和应用程序。服务器程序负责对socket服务器进行封装&#xff0c;并在请…

Java与Python:哪一种最适合您? [信息图]

通过从应用程序中学习企业APM产品&#xff0c;发现更快&#xff0c;更高效的性能监控。 参加AppDynamics APM导览&#xff01; 在软件开发中&#xff0c;很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己&#xff0c;将客观事…

零基础学习java------day11------常用API

API概述 API(application Programming Interface, 应用程序编程接口)&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节 比如我需要在一个程序里面嵌入…

.net 下的集合

集合的操作在编码的时候很常见。但是由于经常使用几种集合。而忽略了一些不常用的集合。在这里我整理下。 首先先了解下接口&#xff1a; 1、IEnumerable&#xff0c;返回一个循环访问集合的枚举器。 2、IEnumerable<T>&#xff0c;返回一个循环访问指定集合T的枚举器。 …

aspects_具有Aspects的Java中的Mixin –用于Scala特性示例

aspectsScala特征允许将新行为混合到一个类中。 考虑两个特征&#xff0c;可以向JPA实体添加审核和与版本相关的字段&#xff1a; package mvcsample.domainimport javax.persistence.Version import scala.reflect.BeanProperty import java.util.Datetrait Versionable {Ver…

TCP服务端实现并发

socket 在 tcp 协议下通信 客户端 import socket ​ # 创建客户端TCP协议通信 c socket.socket() # 与指定服务端握手 c.connect((127.0.0.1, 8080)) ​ # 通信循环 while True:# 向服务端发送信息msg input(>>>)if len(msg) 0:continuec.send(msg.encode(utf-8))#…

问题 1052: [编程入门]链表合并

题目描述已有a、b两个链表&#xff0c;每个链表中的结点包括学号、成绩。要求把两个链表合并&#xff0c;按学号升序排列。 输入第一行&#xff0c;a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出按照学号…