当前位置: 首页 > news >正文

关于中间件技术

中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。中间件可以:

1、负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。

2、提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性。

3、提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。

4、提供多层架构的应用开发和运行的平台,以及应用开发框架,支持模块化的应用开发。

5、屏蔽硬件、操作系统、网络和数据库的差异。

6、提供一组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作。

1.分布式中中间件提供的支持

在一个分布式系统中,中间件通常提供两种不同类型的支持:

1、交互支持,中间件协调系统中的不同组件之间的交互。

2、提供公共服务,即中间件提供对服务的可复用的实现。这些服务可能会被分布 式系统中的很多组件所需要。公共服务是指被不同组件需求的服务,不管这些组件 的功能是什么。这些服务,你可以把这些服务看做是中间件容器提供的。可以在这 个容器中部署你的组件并且这些组件可以访问和使用这些公共服务。 

2.嵌入式中间件

通常,嵌入式中间件没有统一的架构风格,根据应用对象的不同可存在多种类型,比较常见的是消息中间件和分布式对象中间件。

2.1消息中间件

消息中间件是在消息的传输过程中保存信息的容器。消息中间件再将消息从它的源中继到它的目标时充当中间人的作用。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它为止,当然,消息队列保存消息也是有期限的。

消息中间件的特点:

(1)采用异步处理模式。消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上,消息接收者则订阅或是监听该通道。一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出同步回应。整个过程都是异步的。

(2)应用程序和应用程序调用关系为松耦合关系。主要体现在如下两点:发送者和接受者不必了解对方、只需要确认消息;发送者和接受者不必同时在线。比如在线交易系统为了保证数据的最终一致,在支付系统处理完成后会把支付结果放到消息中间件里通知订单系统修改订单支付状态。两个系统通过消息中间件解耦。

消息中间件的传输模式:

(1)点对点模型。点对点模型用于消息生产者和消息消费者之间点到点的通信。消息生产者将消息发送到由某个名字标识的特定消费者。这个名字实际上对于消费服务中的一个队列(Queue),在消息传递给消费者之前它被存储在这个队列中。队列消息可以放在内存中也可以是持久的,以保证在消息服务出现故障时仍然能够传递消息。

(2)发布-订阅模型(Pub/Sub)。发布者/订阅者模型支持向一个特定的消息主题生产消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式就好比是匿名公告板。这种模式被概况为:多个消费者可以获得消息,在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便能够消费者订阅。订阅者必须保持持续的活动状态及接收消息,除非订阅者建立了持久的订阅。

2.2 分布式对象中间件

分布式对象中间件技术是为了解决分布计算和软件复用过程中存在的异构问题而提出的。CORBA,EJB,COM/DCOM是目前主要的3大中间件技术。

上述3种中间件各有特点,CORBA可以跨各种操作平台,包括Windows OS ,甚至支持DOS操作系统而DCOM只支持Win 32; 同时CORBA跨多种语言,支持C++,Smalltalk,JAVA,COBOL,Ada等语言。DCOM主要以桌面Wintel同质平台对象跨应用使用见长,支持带有指针结构的语言如C,C++而不支持JAVA语言。Enterprise JAVA在Internet环境下集组件模式、跨异构平台、兼具事务处理、数据库连接等许多基础结构服务,但仅限于支持JAVA语言。因此我们利用JAVA语言具有简单、面向对象、分布式、解释型、健壮、安全、可移植性的特点结合CORBA的跨异构平台的特性实现对象的重用。

2.2.1EJB

EJB是企业级Java构件,用于开发和部署多层结构的、分布式的、面向对象的Java应用系统。

EJB分为会话Bean、实体Bean和消息驱动Bean。

1、会话Bean:用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个会话Bean来为客户端服务。会话Bean可以直接访问数据库,但更多时候,它会通过实体Bean实现数据访问。

2、实体Bean:用于实现O/R映射,负责将数据库中的表记录映射为内存中的实体对象,事实上,创建一个实体Bean对象相当于新建一条记录,删除一个实体Bean会同时从数据库中删除对应记录,修改一个实体Bean时,容器会自动将实体Bean的状态和数据库同步。

3、消息驱动Bean:是EJB3.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态会话Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

相关文章:

关于中间件技术

中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。中间件可以: 1、负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。 2、提供应用的负载均衡和高可用性、安全机制与管…...

机器学习中的嵌入:释放表征的威力

简介 机器学习通过使计算机能够从数据学习和做出预测来彻底改变了人工智能领域。机器学习的一个关键方面是数据的表示,因为表示形式的选择极大地影响了算法的性能和有效性。嵌入已成为机器学习中的一种强大技术,提供了一种捕获和编码数据点之间复杂关系的…...

【Midjourney入门教程3】写好prompt常用的参数

文章目录 1、图片描述词(图片链接)文字描述词后缀参数2、权重划分3、后缀参数版本选择:--v版本风格:--style长宽比:--ar多样性: --c二次元化:--niji排除内容:--no--stylize--seed--tile、--q 4、…...

01-单节点部署clickhouse及简单使用

1、下载rpm安装包: 官网:https://packages.clickhouse.com/rpm/stable/ clickhouse19.4版本之后只需下载3个rpm安装包,上传到节点目录即可 2、rpm包安装: 安装顺序为conmon->server->client 执行 rpm -ivh ./clickhouse-…...

项目实战:展示第一页数据

1、在FruitDao接口中添加查询第一页数据和查询总记录条数 package com.csdn.fruit.dao; import com.csdn.fruit.pojo.Fruit; import java.util.List; //dao :Data Access Object 数据访问对象 //接口设计 public interface FruitDao {void addFruit(Fruit fruit);vo…...

c#中使用METest单元测试

METest是一个用于测试C#代码的单元测试框架。单元测试是一种软件测试方法,用于验证代码的各个单元(函数、方法、类等)是否按照预期工作。METest提供了一种简单而强大的方式来编写和运行单元测试。 TestMethod:这是一个特性&#…...

七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到Mistral、LLaMA LongLora

前言 如此前这篇文章《学术论文GPT的源码解读与微调:从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述,对于论文的摘要/总结、对话、翻译、语法检查而言,市面上的学术论文GPT的效果虽暂未有多好,可至少还过得去&am…...

社群团购对接合作,你有研究过社群团购平台的选品吗?

社群团购对接合作,你有研究过社群团购平台的选品吗? 社群团购选品是非常重要的一项工作,一个好的社群团购平台选品逻辑包含了:用户定位,时节性,产品性价比,售后率。用户定位在选品过程中非常重要…...

VSCode 如何设置背景图片

VSCode 设置背景图片 1.打开应用商店,搜索 background ,选择第一个,点击安装。 2. 安装完成后点击设置,点击扩展设置。 3.点击在 settings.json 中编辑。 4.将原代码注释后,加入以下代码。 // { // "workben…...

【数据结构】单向链表的增删查改以及指定pos位置的插入删除

目录 单向链表的概念及结构 尾插 头插 尾删 ​编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是…...

PageRank算法c++实现

首先用邻接矩阵A表示从页面j到页面i的概率,然后根据公式生成转移概率矩阵 M(1-d)*Qd*A 常量矩阵Q(qi,j),qi,j1/n 给定点击概率d,等级值初始向量R0,迭代终止条件e; 计算Ri1M*R…...

超低价:阿里云双11服务器优惠价格表_87元一年起

2023阿里云双十一优惠活动已经开启了,轻量2核2G服务器3M带宽优惠价87元一年、2核4G4M带宽优惠价165元一年,云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年,还有2核4G、2核8G、4核8G、4核16G、8核32G等配置报价,云服务器e…...

docker的安装Centos8

在CentOS 7中,可以使用yum安装Docker。Docker官方提供了一个yum源,可以用于安装Docker。以下是安装Docker的步骤: 卸载旧版本的Docker(如果有) 如果你之前安装过Docker,需要先卸载旧版本的Docker。执行以…...

Android.mk文件制定了链接库,但是出现ld Error

问题描述 Android.mk文件中,指定了库: LOCAL_LDLIBS : -lmylib LOCAL_LDFLAGS -L$(MYLIB_DIR)/lib出现ld: error: undefined symbol: my_function,于是查看so里面是否有my_function函数: nm -D libmylib.so | grep my_functio…...

10.MySQL事务(上)

个人主页:Lei宝啊 愿所有美好如期而遇 目录 前言: 是什么? 为什么? 怎么做? 前言: 本篇文章将会说明什么是事务,为什么会出现事务?事务是怎么做的? 是什么? 我…...

nexus搭建npm私有镜像

假设有一个nexus服务,地址为: http://10.10.33.50:8081/ 创建存储空间 登录后创建存储空间,选择存储类型为File,并设置空间名称为 npm-private 创建仓库类型 2.1 创建hosted类型仓库 创建一个名为 npm-hosted 的本地类型仓库 2.…...

智能化的宠物喂食器解决方案

随着经济条件的不断改善,越来越多的家庭开始追求生活的便捷享受,于是喂食器开始走进千家万户,喂食器主要由储存食物的蓄食箱和传送食物的滑道构成,在外部框架的支撑下,一台喂食器才能正常进行工作,而宠物喂…...

java配置GDAL

<gdal.version>3.7.0</gdal.version><!-- gdal--><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>${gdal.version}</version></dependency> GDAL环境安装 downlo…...

采购对接门禁系统采购进厂 空车出厂

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:山JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文…...

服务器经常被攻击的原因

很多中小型企业都是选择虚拟主机服务器&#xff0c;是把一个服务器分成很多个给很多企业一起共用&#xff0c;可能同一个 IP服务器上就有很多个不同企业的网站&#xff0c;这个时候如果跟你同一个IP服务器的网站遭到DDoS攻击&#xff0c;就很有可能会影响到你的网站也无法正常访…...

Gemma-3 Pixel Studio实战教程:离线模式部署与本地模型权重缓存策略

Gemma-3 Pixel Studio实战教程&#xff1a;离线模式部署与本地模型权重缓存策略 1. 项目概述与核心价值 Gemma-3 Pixel Studio是基于Google最新开源Gemma-3-12b-it模型构建的多模态对话终端&#xff0c;将强大的文本理解能力与视觉感知功能完美结合。与传统对话系统相比&…...

小米智能家居与Home Assistant深度整合方案

小米智能家居与Home Assistant深度整合方案 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 小米智能家居与Home Assistant的深度整合为用户提供了全面的智能设备控制解…...

cv_unet_image-colorization音乐史料处理:黑白乐谱AI上色与音符语义关联增强

cv_unet_image-colorization音乐史料处理&#xff1a;黑白乐谱AI上色与音符语义关联增强 1. 引言&#xff1a;当黑白乐谱遇见AI色彩 想象一下&#xff0c;你是一位音乐史研究者&#xff0c;面前摊开一本泛黄的、只有黑白线条的19世纪乐谱手稿。那些音符、标记、作曲家的笔迹&…...

cv_resnet101_face-detection_cvpr22papermogface 模型部署的网络安全考量:防范403 Forbidden等常见攻击

cv_resnet101_face-detection_cvpr22papermogface 模型部署的网络安全考量&#xff1a;防范403 Forbidden等常见攻击 把一个人脸检测模型&#xff0c;比如 cv_resnet101_face-detection_cvpr22papermogface&#xff0c;部署成一个Web API&#xff0c;这事儿听起来挺酷的。想象…...

vscode|无法连接到远程扩展主机服务器 (错误: CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: “No such

无法连接到远程主机服务器&#xff08;错误&#xff1a; CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: "No such file or directory" })))这是一个典型的 VSCode Remote-SSH 连接失败 错误。虽然本地网络正常、服务器在线&#xff0c;但 VSCod…...

Psins实战:从零解析SINS/GPS松组合导航中的Kalman滤波器初始化与调参

1. 初识SINS/GPS松组合导航与Kalman滤波 刚接触导航算法的朋友可能会被"SINS/GPS松组合"这个术语吓到&#xff0c;其实拆开看很简单。SINS&#xff08;捷联惯性导航系统&#xff09;就像是个不知疲倦的计步器&#xff0c;通过IMU&#xff08;惯性测量单元&#xff09…...

Arduino轻量级协作式任务调度库Jobber详解

1. Jobber库概述&#xff1a;面向Arduino的轻量级协作式任务调度框架Jobber是一个专为资源受限嵌入式平台&#xff08;尤其是Arduino系列MCU&#xff09;设计的协作式任务调度库&#xff0c;其核心目标是提供一种“模拟多线程”的编程模型&#xff0c;使开发者能够以接近线程的…...

别再只盯着大模型了!手把手教你用Python+卫星数据做农业产量预测(附代码)

用Python和卫星数据构建农业产量预测模型&#xff1a;从数据获取到结果可视化全流程指南 当我们在谈论智慧农业时&#xff0c;往往容易陷入对大模型的盲目崇拜。但实际上&#xff0c;一套简单实用的数据科学流程&#xff0c;配合公开免费的卫星遥感数据&#xff0c;就能为中小农…...

Chatterbox:多语言语音合成的开源解决方案

Chatterbox&#xff1a;多语言语音合成的开源解决方案 【免费下载链接】chatterbox Open source TTS model 项目地址: https://gitcode.com/GitHub_Trending/chatterbox7/chatterbox Chatterbox是一款由Resemble AI开发的开源语音合成&#xff08;TTS&#xff09;模型&a…...

Xilinx Video IP(二)AXI4-Stream视频流高效缓冲与FIFO深度优化

1. AXI4-Stream视频流缓冲的核心挑战 在视频处理系统中&#xff0c;AXI4-Stream协议因其高效的数据传输特性成为Xilinx视频IP的首选接口。但实际工程中&#xff0c;时钟域异步和速率不匹配两大问题就像两个调皮的孩子&#xff0c;总喜欢给工程师制造麻烦。我曾在多个项目中遇到…...