HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

完整微服务化示例:使用 Apache ServiceComb 进行微服务开发、容器化、弹性伸缩(三)

  • 2019-12-25
  • 本文字数:2427 字

    阅读完需:约 8 分钟

完整微服务化示例:使用 Apache ServiceComb 进行微服务开发、容器化、弹性伸缩(三)

养蜂人 (Beekeeper)

养蜂人研究蜜蜂繁殖规律,计算每只蜜蜂 (雄蜂/雌蜂) 的祖先数量。因为蜜蜂繁殖规律和黄金分割数列相关,所以养蜂人同时消费技工提供的计算服务。


研究(http://www.dave-cushman.net/bee/fibonacci.html)表明,雄蜂(Drone)由未受精卵孵化而生,只有母亲;而雌蜂(Queen)由受精卵孵化而生,既有母又有父。



Credit: Dave Cushman’s website


参考上图,蜜蜂的某一代祖先数量符合黄金分割数列的模型,由此我们可以很快实现服务功能。

蜜蜂繁殖规律研究服务

首先我们定义黄金数列运算接口:


public interface FibonacciCalculator {  long term(int n);}
复制代码


接下来定义并实现蜜蜂繁殖规律研究服务:


interface BeekeeperService {  long ancestorsOfDroneAt(int generation);
long ancestorsOfQueenAt(int generation);}
class BeekeeperServiceImpl implements BeekeeperService {
private final FibonacciCalculator fibonacciCalculator;
BeekeeperServiceImpl(FibonacciCalculator fibonacciCalculator) { this.fibonacciCalculator = fibonacciCalculator; }
@Override public long ancestorsOfDroneAt(int generation) { if (generation <= 0) { return 0; } return fibonacciCalculator.term(generation + 1); }
@Override public long ancestorsOfQueenAt(int generation) { if (generation <= 0) { return 0; } return fibonacciCalculator.term(generation + 2); }}
复制代码


这里我们用到之前定义的 FibonacciCalculator 接口,并希望通过这个接口远程调用技工服务端点。@RpcReference 注释能帮助我们自动从 Service Center 中获取 microserviceName = “worker”, schemaId = “fibonacciRpcEndpoint” , 即服务名为 worker 已经 schema ID 为 fibonacciRpcEndpoint 的端点:



@Configurationclass BeekeeperConfig {
@RpcReference(microserviceName = "worker", schemaId = "fibonacciRpcEndpoint") private FibonacciCalculator fibonacciCalculator;
@Bean BeekeeperService beekeeperService() { return new BeekeeperServiceImpl(fibonacciCalculator); }}
复制代码


我们在技工一节已定义好对应的服务名和 schema ID 端点,通过上面的配置,ServiceComb 会自动将远程技工服务 实例和 FibonacciCalculator 绑定在一起。

养蜂人服务端点

与上一节技工服务相似,我们在这里也需要提供养蜂人服务端点,让用户可以进行调用:



@RestSchema(schemaId = "beekeeperRestEndpoint")@RequestMapping("/rest")@Controllerpublic class BeekeeperController {
private static final Logger logger = LoggerFactory.getLogger(BeekeeperController.class);
private final BeekeeperService beekeeperService;
@Autowired BeekeeperController(BeekeeperService beekeeperService) { this.beekeeperService = beekeeperService; }
@RequestMapping(value = "/drone/ancestors/{generation}", method = GET, produces = APPLICATION_JSON_UTF8_VALUE) @ResponseBody public Ancestor ancestorsOfDrone(@PathVariable int generation) { logger.info( "Received request to find the number of ancestors of drone at generation {}", generation);
return new Ancestor(beekeeperService.ancestorsOfDroneAt(generation)); }
@RequestMapping(value = "/queen/ancestors/{generation}", method = GET, produces = APPLICATION_JSON_UTF8_VALUE) @ResponseBody public Ancestor ancestorsOfQueen(@PathVariable int generation) { logger.info( "Received request to find the number of ancestors of queen at generation {}", generation);
return new Ancestor(beekeeperService.ancestorsOfQueenAt(generation)); }}
class Ancestor { private long ancestors;
Ancestor() { }
Ancestor(long ancestors) { this.ancestors = ancestors; }
public long getAncestors() { return ancestors; }}

复制代码


因为养蜂人需要消费技工提供的服务,所以其 microservice.yaml 配置稍有不同:


# all interconnected microservices must belong to an application wth the same IDAPPLICATION_ID: companyservice_description:# name of the declaring microservice  name: beekeeper  version: 0.0.1cse:  service:    registry:      address: http://sc.servicecomb.io:30100  rest:    address: 0.0.0.0:8090  handler:    chain:      Consumer:        default: bizkeeper-consumer,loadbalance  references:#  this one below must refer to the microservice name it communicates with    worker:      version-rule: 0.0.1

复制代码


这里我们需要定义 cse.references.worker.version-rule ,让配置名称中指向技工服务名 worker ,并匹配其版本号。


最后定义养蜂人服务应用入口:


@SpringBootApplication@EnableServiceCombpublic class BeekeeperApplication {
public static void main(String[] args) { SpringApplication.run(BeekeeperApplication.class, args); }}
复制代码


本文转载自微服务蜂巢公众号。


原文链接:https://mp.weixin.qq.com/s?__biz=MzUxNTEwNTg5Mg==&mid=2247488670&idx=1&sn=7556990599cea8e0fd80ed54b9f39026&chksm=f9bae195cecd688332940d0b296909e8130d828104c36c20f49d76d43561f626eae24bd0c1ef&scene=0&xtrack=1&key=17fbc717c1803f309d535a4bdbc0f9c0d8d2089a5c7e455df8c0a5e6d824a6534b8476d2ad151cd45ed10eb7a15577914596444e867d96f615c277fc05fe951cef48de8b7d0732dcb4bc74f5c0e2f95a&ascene=14&uin=MTI5MjAyNjcyMQ%3D%3D&devicetype=Windows+10&version=62070158&lang=zh_CN&exportkey=AfH3CzqE%2F1ENttvg815y9Uo%3D&pass_ticket=oGcazNeaRfkuszcDU0L7jpfeTFZ3%2FULBAbPnhurUkiyW7DLvBVsoC%2Fh5OWX1zIsH


2019-12-25 18:10648

评论

发布
暂无评论
发现更多内容

魔搭+ 函数计算: 一键部署,缩短大模型选型到生产的距离

Serverless Devs

容器 云原生 中间件 函数计算 函数计算FC

软件测试学习笔记丨抓包工具Charles实战

测试人

软件测试

重磅来袭“2024粤港澳电子展”覆盖电子信息完整产业链

AIOTE智博会

电子展 电子信息展 电博会

部署SD-WAN需要多长时间?多少钱?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

小程序全生命周期管理如何安排

Geek_2305a8

CleanMyMac X v4.14.6中文版 强大的mac系统清理工具

iMac小白

惊为天人!这个保存推特视频到手机相册的办法真的一绝!

frank

twitter

应用集成(iPaaS)和数据集成(ETL)高效协同的最佳实践

RestCloud

ETL 数据集成 应用集成 ipaas

Sketch for mac(矢量绘图软件) 99.1中文激活版

iMac小白

OpenKruise :Kubernetes背后的托底

华为云开发者联盟

开发 华为云 华为云开发者联盟

华为云幻兽帕鲁服务器搭建教程(Windows平台)

YG科技

Disk Drill mac 5.4.1426中文激活版 数据恢复软件

iMac小白

业务-研发一体化的管理平台是否存在?

Geek_2305a8

Apifox 1月更新:性能测试、多人协作接口实时同步功能全面解析

Apifox

程序员 性能测试 Apifox API 接口工具

2023 年度龙蜥最佳用户案例奖揭晓,中国移动、小红书、中国人寿财险等企业上榜!

OpenAnolis小助手

开源 操作系统 用户案例 龙蜥社区 商业版

测试管理进阶 | 如何打造一份出彩的工作汇报!

测吧(北京)科技有限公司

测试

走出大模型部署新手村!小明这样用魔搭+函数计算

Serverless Devs

容器 中间件 函数计算 函数计算FC

理解ETF的风险:透明度高、投资组合清晰可见背后的考量

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

2023京东零售技术年度盘点

京东科技开发者

Capture One 23 Enterprise Mac 16.3.4.5企业版 RAW图像编辑处理

iMac小白

Yuliverse:引领区块链游戏新篇章!

Footprint Analytics

区块链游戏 元宇宙 链游 Web3 游戏

MetaVideo mac 1.1.3激活版 视频元数据编辑

iMac小白

基于taro搭建小程序多项目框架

EquatorCoco

小程序 taro 前端框架 小程序开发

定向减免!函数计算让 ETL 数据加工更简单

Serverless Devs

容器 云原生 中间件 函数计算 函数计算FC

低代码(Low-Code)技术简化开发难度,快速搭建应用

互联网工科生

软件开发 低代码 数字化 JNPF

速看!盘点这一年 OpenTiny 都在做什么?

OpenTiny社区

开源 前端 低代码 组件库

DirEqual mac 5.8 激活版 文件夹比较工具

iMac小白

玩转数据处理利器:学会使用 YAML 文件轻松处理数据

测吧(北京)科技有限公司

测试

Web3 游戏开发者的数据分析指南

Footprint Analytics

区块链 区块链游戏 #Web3 web3游戏

完整微服务化示例:使用 Apache ServiceComb 进行微服务开发、容器化、弹性伸缩(三)_语言 & 开发_ServiceComb_InfoQ精选文章