可恶的播客:Bytebuddy创始人拉斐尔·温特豪德(Rafael Winterhalter)
嗨, Spring 粉丝!欢迎来到Bootiful Podcast的另一期!在本周的分期付款中,乔希·朗( @starbuxman )与拉斐尔·温特豪德 (Rafael Winterhalter)( @rafaelcodes )谈论Bytebuddy; Mockito; JVM;字节码挪威奥斯陆;还有更多。
嗨, Spring 粉丝!欢迎来到Bootiful Podcast的另一期!在本周的分期付款中,乔希·朗( @starbuxman )与拉斐尔·温特豪德 (Rafael Winterhalter)( @rafaelcodes )谈论Bytebuddy; Mockito; JVM;字节码挪威奥斯陆;还有更多。
在上一篇文章中 ,我试图为我们转向Spring Cloud Stream (SCSt)中的功能编程模型提供理由。更少的代码 , 更少的配置 。不过,最重要的是,您的代码是完全分离的,并且与SCSt的内部结构无关。
在本文中,我将进行更深入的探讨并总结功能支持的核心功能,尤其是围绕其响应功能。
重要提示: 您可以做的任何事情
@StreamListener/@EnableBinding
您也可以不用它。换句话说,功能支持现在与基于注释的支持在功能上兼容。
事件驱动的体系结构很棒。但是如果没有框架,编写与流行的事件消息传递平台一起使用所需的脚手架可能会很麻烦。在本文中,我们将介绍如何使用Spring Cloud Stream简化代码。
您只想为事件驱动的应用程序编写逻辑,但是样例消息代码可能会妨碍您的工作。将您的应用程序连接到消息传递服务非常棘手,如果您是企业开发人员,则可能需要使用多种消息传递技术(本地或云中)。
嗨, Spring 粉丝!哇!好一个星期!上周是疯狂的 SpringOne Platform 2019活动,我仍在恢复中!然后,我飞回家,在旧金山接待了Spring团队成员,Micrometer负责人和朋友Tommy Ludwig,并准备在星期一(在德国斯图加特)和星期二(在阿姆斯特丹)飞赴会议和参加用户组露面。
我准备好了,然后接到哥哥打来的电话,说我81岁的父亲身体不好(感谢大家的祝福!),我进入了Uber,去了旧金山机场。并被送往医院遗憾的是,我不得不取消在这些国家的现场演出。对于那些让我失望的人,我感到非常抱歉。能够远程进行一些会议,我感到非常高兴。感谢当我飞往洛杉矶与我父亲同住时,我的所有支持和支持。
这是一系列博客文章中的第一篇,旨在澄清和预览即将发布的spring-cloud-stream和spring-cloud-function (均为3.0.0)版本中的内容。
最近,我与一个用户进行了讨论,听到了一些提示,促使我开始撰写一系列博客文章(以此为起点),目的是揭开Spring Cloud Stream和Spring Cloud Function项目的真实目标的神秘面纱,并进行演示。他们的新功能。
促使所有这一切的特定短语是- “ Spring Cloud Stream,是轻量级的Spring Integration输入/输出路由器……” 。这是一种有趣的看法,但我必须不同意。虽然它可能是受企业集成模式(EIP)的启发,并基于Spring Integration(SI)构建的,但最后一部分实际上只是实现细节。Spring Cloud Stream(SCSt)作为框架从来就不是“成为轻量级的Spring Integration输入/输出路由器” 。实际上,该陈述表明了问题的一部分,在某种程度上,SI(支持SCSt的一些内部需求的选择框架)被认为是SCSt的核心,因此许多人认为SCSt是扩展或扩展。 SI的包装器。它不是。一直以来都是关于纯微服务,并将它们绑定到数据的源和目标 (即消息传递系统)。就那么简单。
如果您不了解SCSt的内部知识就足够抽象,那么您很快就会意识到它确实是一个绑定和激活框架。它将一段代码(由用户提供)绑定到活页夹公开的数据的源/目标,并根据活页夹实现(例如消息到达等)激活此类代码。就是这样。
嗨, Spring 粉丝!在这个平台SpringOne上2019插曲,约什-龙( @starbuxman )采访 Spring 疯狂的科学家安迪·克莱门特( @andy_clement了AspectJ,规划环境地政司,Eclipse的新格拉尔本地图像特征),是一个铁人三项全能运动员,等等。
在这里,终于在这里!我一年中最喜欢的时间!SpringOne平台周快乐!本周,我在德克萨斯州奥斯汀市令人惊叹的会议上,与任何想要了解Spring一切的人进行交谈。已经有一吨在本届展会上宣布令人惊奇的事情,但是有一件事我一直很期待与大家分享你们的是,我们刚刚宣布了新的Azure的云春运行。(有关更多信息,请参见下面的链接)
我一直很忙!我正在与Microsoft在Azure Spring Cloud上进行对话,并与Okta / Google在简化开发生命周期上进行对话。另外,我明天早上主持主题演讲。要做的这么多,时间却这么少!
Spring Data Moore附带16个模块,已完成700多张票。它包括整个产品组合中的大量改进和新功能,并且重点关注三个主要主题:Reactive,Kotlin和Performance。该版本增加了诸如声明式反应式事务和协程/流程支持等功能,并提供了高达60% *更快的查找器方法。
让我们从Moore的一些Reactive功能开始。
Lovelace发行版以封闭式的方式引入了对响应式交易的早期支持,从而留出了一些改进的空间。以下清单显示了该样式:
public Mono<Process> doSomething(Long id) {
return template.inTransaction().execute(txTemplate -> {
return txTemplate.findById(id)
.flatMap(it -> start(txTemplate, it))
.flatMap(it -> verify(it))
.flatMap(it -> finish(txTemplate, it));
}).next();
}
在前面的代码段中,必须通过显式调用来启动事务inTransaction()
在闭包内使用一个事务感知模板,调用next()
最后把返回的Flux
变成一个Mono
满足方法签名,即使findById(…)
已经只发出一个元素。
显然,这不是进行被动交易的最直观的方法。因此,让我们看看使用声明式反应式事务支持的相同流程。与Spring的交易支持一样 ,您需要一个组件来为您处理交易。对于被动交易, ReactiveTransactionManager
目前由MongoDB和R2DBC模块提供。以下清单显示了这样的组件:
@EnableTransactionManagement
class Config extends AbstractReactiveMongoConfiguration {
// …
@Bean
ReactiveTransactionManager mgr(ReactiveMongoDatabaseFactory f) {
return new ReactiveMongoTransactionManager(f);
}
}
从那里,您可以使用@Transactional
并依靠基础架构来启动,提交和回滚事务流,以通过Reactor Context处理生命周期。这使您可以将代码从Lovelace转换为以下清单,从而无需使用范围模板和多余的闭包Flux
至Mono
转型:
@Transactional
public Mono<Process> doSomething(Long id) {
return template.findById(id)
.flatMap(it -> start(template, it))
.flatMap(it -> verify(it))
.flatMap(it -> finish(template, it));
}
嗨, Spring 粉丝!在本集中, 乔什·朗 (@starbuxman)采访了甲骨文公司的Geertjan Wielenga (@GeertjanW)谈论他的新书(关于开发人员倡导)“ Developer,Advocate!”。
你好反应堆社区,
我很高兴代表Reactor团队及其英勇的新贡献者宣布,现在可以在您喜欢的Maven仓库中找到Reactor s,就像这样 。
这是自Reactor Core 3.x以来的第四次发布,其中包括Reactor Core 3.3
, Reactor Netty 0.9
还有一个新来者Reactor Pool 0.1
。查看主要更改日志和发行说明:
- 反应堆核心3.3.0。发布
- 反应堆净值0.9.0。发布
- 反应堆0.1.0。发布
Reactor s模块仍需要JDK 8或更高版本。它们带来了许多性能改进,我们甚至确定了更多的领域来关注下一个补丁和主要版本。请和我一起热烈欢迎这个家庭的新模块Reactor Pool。它是您正在等待的通用可嵌入反应对象池。它由Reactor Netty使用,我们计划在其之上构建更多功能。与Reactor Netty一样,我们尚未对主要的“ 1.x”版本进行鉴定,因为我们期望在考虑API稳定之前进行调整。