未来是Apache Karaf上的微服务架构

这是Jamie Goodyear的客座博客文章( 博客 , @ icbts )。 他是Savoir Technologies的开源倡导者,Apache开发人员和计算机系统分析师; 他为全球大型组织设计,批判和支持了体系结构。 他拥有纽芬兰纪念大学的计算机科学理学学士学位。


Jamie曾在系统管理,软件质量保证和高级软件开发人员职位中工作,其业务范围从小型初创企业到国际公司。 他已经在Apache Karaf,ServiceMix和Felix上获得了提交者身份,并且是Apache Karaf的项目管理委员会成员,并且是Apache Software Foundation成员。 他的第一本印刷出版物是与Johan Edstrom合着的《即时OSGi入门》,Packt Publishing,然后是与Johan Edstrom和Heath Kesler一起学习Apache Karaf,Packt Publishing的。 他的第三本也是最新出版的书是《 Apache Karaf Cookbook》 ,Packt Publishing和Johan Edstrom,Heath Kesler和Achim Nierbeck。

我喜欢微服务架构。

关于微服务的构成有很多描述,可以按照模式描述许多规范。 简而言之,我倾向于将它们描述为应用程序可以为他人提供服务的最小工作单元。 将这些服务整合在一起,我们便能够构建更大的架构,这些架构具有模块化,重量轻且易于更改的特点。

从现代系统体系结构的角度来看,为小型应用程序提供完整生命周期控制的能力是我们的想法平台。 运营商只需部署所需的服务,就地更新它们,并根据需要扩展其他实例。 另一种描述方式是应用程序即服务(AaaS)。 采用特定的小型服务,例如Apache Camel路由或Apache CXF端点,并在不破坏整个应用程序的情况下对其进行调整。 Apache Karaf IS是执行微服务的平台。

为了简化微服务,Karaf提供了许多开箱即用的有用功能。

  • 一组经过良好测试的库和框架,有助于为组装应用程序平台消除猜测。
  • 通过各种机制(例如Apache Maven)配置库或应用程序。
  • 功能描述符,允许一起部署相关服务和资源。
  • 控制台和基于Web的命令可帮助您轻松进行精细的控制,并且
  • 通过Pax考试简化了集成测试。

我最喜欢的微服务模式之一是将Apache Camel与Apache Karaf上的托管服务工厂(MSF)一起使用。 Camel提供了一个简单的DSL,用于将企业集成模式连接在一起,以将数据从端点A移动到端点B为例。 托管服务工厂是一种模块化模式,用于配置驱动的微服务部署–将ConfigAdmin,OSGi Service Registry和我们的应用程序代码联系在一起。

1个
例如,用户可以使用MSF创建配置以连接其骆驼路线,每个配置将生成唯一的PID。 这种模式确实强大。 创建100个配置,并将实例化100个相应的微服务(骆驼路线)。 但是,只有一组代码需要维护。

让我们仔细看一下托管服务工厂的实现。 ManagedServiceFactory负责管理实例化(configurationPid),创建或更新实例化服务的值,最后负责在服务实例化之后进行清理。 阅读有关ManagedServiceFactory API的更多信息。

public class HelloFactory implements ManagedServiceFactory {@Overridepublic String getName() { return configurationPid; }@Overridepublic void updated(String pid, Dictionary dict) throws  ConfigurationException { // Create a dispatching engine for given configuration.}@Overridepublic void deleted(String pid) {// Delete corresponding dispatch engine for given configuration.}//We wire in blueprintpublic void init() {} public void destroy() {}public void setConfigurationPid(String configurationPid) {}public void setBundleContext(BundleContext bContext) {}public void setCamelContext(CamelContext camelContext) {}
}

我们重写给定的ManageServiceFactory接口以与DispatchEngines一起使用。 DispatchEngine是一个简单的类,其中包含用于使用给定配置实例化Camel路由的代码。

public class HelloDispatcher {public void start() {// Create routeBuilder using configuration, add to CamelContext.// Here ‘greeting’ and ‘name’ comes from configuration file.from(“timer://helloTimer?fixedRate=true.=1000").routeId("Hello " + name).log(greeting + " " + name);            }public void stop() {// remove route from CamelContext.} 
}

2

当将这些类作为捆绑包部署到Karaf中时,我们获得了功能特别强大的应用程序即服务。 我们为服务提供的每个配置都会实例化一个新的Camel路由器(这些配置文件非常简单地由Greeting和Name组成)。 骆驼的Karaf命令可以对这些路线进行细粒度的控制,从而为操作员提供简单的管理。

上面的示例的完整代码可通过github获得 ,并在Packt Publishing的Apache Karaf Cookbook中进行了详细探讨。

诸如上述的微服务架构为常见的应用(如骆驼路线或CXF端点)释放了OSGi的强大功能。 这些并不是唯一受益的应用程序。 我想分享一下我们的Karaf成功案例,其中重点介绍了Apache Karaf如何帮助将结构引入现有的基于大规模微服务的项目中。

想象一下,有成百上千个分发包分布在数十个相互关联的项目上,这些项目实际上已部署在一个普通的OSGi内核中,并祝万事如意,以成功地正常启动。 这就是SDN和NFV的平台OpenDaylight在几个月前发现的情况。

3

使用Karaf Feature描述符,每个项目都能够将其依赖项,捆绑包和其他资源组织成一致的结构。 开发了自定义命令以与其核心服务进行交互。 每个项目到项目整体的集成测试都是自动化的。 最后,所有这些项目都已集成到自己的自定义发行版中。

他们的第一个基于Karaf的版本Helium即将发布。 我们都期待着将SDN和NFV社区欢迎到Karaf。

虽然将Apache Karaf 3.0.x系列保持为我们的主要生产目标,但社区一直在忙于开发下一代Karaf容器。

4.0.x系列将通过Felix 4.4.1和Equinox 3.9.1-v20140110-1610附带OSGi Rev5支持,以及基于声明服务而不是蓝图的完全重构的内部框架。 从用户的角度来看,这些更改将产生一个更小,更高效的Karaf内核。 Karaf中将提供蓝图功能,因此您可以轻松安装基于蓝图的应用程序。 您将始终能够在Karaf中使用“蓝图”。 因此,从用户角度来看,主要区别在于,如果需要,您需要依赖Blueprint服务。

这是对Apache Karaf上的微服务架构的非常简要的概述,以及Karaf的未来方向。 我建议任何对微服务感兴趣的人访问OSGi联盟网站 ,并加入Apache Karaf社区 。 对于那些想深入学习高级定制Karaf发行版的人,可以看看Aetos 。 Apache Karaf也是JBoss Fuse的一部分。

翻译自: https://www.javacodegeeks.com/2014/10/the-future-is-micro-service-architectures-on-apache-karaf.html

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

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

相关文章

使用内存回流的方法来实现将image的内容转换为 byte[]

在今天的开发中老大不知道怎么突发奇想&#xff0c;要使用Image的Byte数据。当时使用老几种方式效果均不理想&#xff0c;最后发现其实可以使用内存回流的方式来实现。多的不说老&#xff0c;马上贴上代码&#xff1a;/**//// <summary> /// 将byte[]转换为Image…

通过设计国际象棋游戏来了解策略模式

今天&#xff0c;我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式&#xff0c;而不是构建全面的国际象棋游戏解决方案。 策略模式&#xff1a;策略模式被称为行为模式-用于管理对象之间的算法&#xff0c;关系和职责。 策…

群发邮件

最近&#xff0c;通过两周的学习&#xff0c;对.net 的基础知识有了进一步的了解。觉得自己可以写个小程序了。于是花了两天时间写了一个 群发邮件的一个WinForm小程序。自己在这里小秀一下&#xff0c;表扬及鼓励一下自己。哈哈&#xff01; 此小程序在发送邮件的基础上还添加…

Npm install failed with “cannot run in wd”

Linux环境下&#xff0c;root账户&#xff0c;安装某些npm包的时候报下面的错误&#xff0c;例如安装grunt-contrib-imagemin时&#xff1a; Error: EACCES, mkdir /usr/local/lib/node_modules/coffee-scriptnpm ERR! { [Error: EACCES, mkdir /usr/local/lib/node_modules/c…

我的Google Adsense帐户被关

一、 上周四&#xff0c;我收到Google的邮件&#xff0c;宣布关闭我的Adsense帐户。 "您好&#xff01; 查看了相关记录后&#xff0c;我们确认您的 AdSense 帐户存在引起无效活动的风险。保护 AdWords 广告客户&#xff0c;使其免受无效活动的侵害是我们的责任&#xff0…

csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...

ODP.NET: 引用&#xff1a; using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; //下载 http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html //引用&#xff1a;D:\app\geovindu…

Java 9幕后花絮:新功能从何而来?

找出Java幕后发生的事情&#xff0c;以及新功能如何实现 在上一篇文章中&#xff0c;我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能&#xff0c;并简要提到了将新功能添加到下一个版本之前要经历的过程。 由于此过程几乎影响了所有Java开发人员&#xff0c;但大多数…

sudo apt-get install libstdc++6

sudo apt-get install libstdc6 yum install libncurses.so.5 sudo apt-get install libncurses.so.5 sudo apt-get install lib32ncurses5 apt-get update把源更新一下 使用gdb时的指令 (gbd) info line *0x08xxxx sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.…

AngularJS快速入门指南03:表达式

AngularJS通过表达式将数据绑定到HTML。 AngularJS表达式 AngularJS表达式写在双大括号中&#xff1a;{{ 表达式语句 }}。 AngularJS表达式绑定数据到HTML的方式与ng-bind指令的方式相同。 AngularJS会准确地将表达式“输出”为计算的结果。 AngularJS表达式与JavaScript表达式…

零基础快速上手HarmonyOS ArkTS开发2---ArkTS开发实践

ArkTS开发实践&#xff1a; 接着上一次零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍继续&#xff0c; 在上一次对于ArkTS的基础知识进行了学习&#xff0c;依照官方的课程计划&#xff0c;还有两个具体的小案例需要来实践实践&#xff1a; 实践出…

八、VueJs 填坑日记之参数传递及内容页面的开发

我们在上一篇博文中&#xff0c;渲染出来了一个列表&#xff0c;并在列表中使用了router-link标签&#xff0c;标签内的&#xff1a;to就是链接地址&#xff0c;昨天咱们是<router-link :to"/content/ i.id">这样写的&#xff0c;今天我们来完成内容页面的渲染…

为Kindeditor控件添加图片自动上传功能

Kindeditor是一款功能强大的开源在线HTML编辑器&#xff0c;支持所见即所得的编辑效果。它使用JavaScript编写&#xff0c;可以无缝地与多个不同的语言环境进行集成&#xff0c;如.NET、PHP、ASP、Java等。官方网站可以查看这里&#xff1a;http://kindeditor.net/index.php Ki…

4个万无一失的技巧让您开始使用JBoss BRMS 6.0.3

上周&#xff0c;红帽发布了标记为6.0.3的JBoss BRMS的下一版本&#xff0c;已订阅的用户可以在其客户门户中使用。 如果您对该版本的新增功能感到好奇&#xff0c;请在客户门户网站上在线查看版本说明和其余文档 。 我们正在寻找一些简单的方法来开始使用此新版本&#xff0…

带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分

这是Angular JS承诺的Java EE 7的后续版本–第1部分 。 花了比我预期更长的时间&#xff08;找到时间来准备代码和博客文章&#xff09;&#xff0c;但是终于到了&#xff01; 应用程序 第1部分中的原始应用程序只是带有分页的简单列表&#xff0c;以及提供列表数据的REST服务…

Chrome不显示OPTIONS请求的解决方法2021版chrome90

在chrome90上之前展示跨域请求预检请求的方法失效了&#xff1a; 在chrome地址栏总输入 chrome://flags/#out-of-blink-cors 将其设置为Disabled后重启浏览器 在chrome://flags找不到选项out-of-blink-cors。取而代之的是chrome将预检请求放到了控制台网络面板的 OTHER 面板中。…

SVG实现波浪效果

SVG实现波浪效果 svg path&#xff1a;C 贝塞尔曲线绘制波浪形状 A 绘制圆弧形 svg animate&#xff1a;制作波浪动画&#xff0c;为了波浪动画效果自然&#xff0c;设置values关键点       attributeName&#xff1a;变化属性名 dur&#xff1a;动画时间 repeatCount&a…

使用WildFly 8在Java EE7中自举Apache Camel

从Camel版本2.10开始&#xff0c;支持CDI&#xff08;JSR-299&#xff09;和DI&#xff08;JSR-330&#xff09;。 这为在Java EE容器中以及独立Java SE或CDI容器中开发和部署Apache Camel项目提供了新的机会。 是时候尝试一下并熟悉它了。 骆驼到底是什么&#xff1f; 骆驼是…

好东西要分享

目录 矢量图标库$\text{pic}$图论神器$\text{bzoj}$离线题库打字速度表情包PPP矢量图标库 个人jio的这个阿里巴巴矢量图标库蛮不错的 上面这张就是去上面的网站找的。 $\text{pic}$ 来wallpaper abyss找点好康的图片吧。 图论神器 画图 $\text{bzoj}$离线题库 $\text{bzoj}$离线…

Vue2.0 全家桶开发的网页应用(参照吾记APP)

github链接 借鉴吾记APP&#xff0c;使用 vue2.0 vue-router vuex 为主要技术栈&#xff0c;elementui做为ui框架&#xff0c;多模块 spa 模式&#xff0c;webpack2.0 负责模块打包&#xff0c;gulp 负责处理静态资源打包、压缩&#xff0c;欢迎打赏star&#xff01;&#xff…

Java EE 7批处理和魔兽世界–第1部分

这是我在上一个JavaOne上的会议之一。 这篇文章将扩展主题并使用Batch JSR-352 API进入一个实际的应用程序。 此应用程序与MMORPG 魔兽世界集成。 由于JSR-352是Java EE世界中的新规范&#xff0c;所以我认为许多人不知道如何正确使用它。 确定本规范适用的用例也可能是一个挑…