QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

    阅读完需:约 6 分钟

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

技工 (Worker)

因为技工最为简单,对其他部门人员依赖最少,我们首先搭建这个部门。

黄金分割运算服务

技工的主要工作是提供黄金分割数列计算服务,当用户需要知道第 n 个黄金分割数时,技工以最快的速度计算出数值并返回给用户。我们可以把这个工作简化为如下数学方程:


value = fibo(n)
复制代码


在暂时不考虑性能的情况下,我们可以迅速实现黄金分割数列的计算。



interface FibonacciService { long term(int n);}

@Serviceclass FibonacciServiceImpl implements FibonacciService { @Override public long term(int n) { if (n == 0) { return 0; } else if (n == 1) { return 1; }

return term(n - 1) + term(n - 2); }}

复制代码

技工服务端点

黄金分割数量运算已经实现,现在我们需要将服务提供给用户,首先我们定义端点接口:



public interface FibonacciEndpoint { long term(int n);}

复制代码


引入 ServiceComb 依赖:



<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>spring-boot-starter-provider</artifactId></dependency>

复制代码


接下来我们同时暴露黄金分割运算服务的 Restful 和 RPC 端点:


@RestSchema(schemaId = "fibonacciRestEndpoint")@RequestMapping("/fibonacci")@Controllerpublic class FibonacciRestEndpoint implements FibonacciEndpoint {
private final FibonacciService fibonacciService;
@Autowired FibonacciRestEndpoint(FibonacciService fibonacciService) { this.fibonacciService = fibonacciService; }
@Override @RequestMapping(value = "/term", method = RequestMethod.GET) @ResponseBody public long term(int n) { return fibonacciService.term(n); }}
@RpcSchema(schemaId = "fibonacciRpcEndpoint")public class FibonacciRpcEndpoint implements FibonacciEndpoint {
private final FibonacciService fibonacciService;
@Autowired public FibonacciRpcEndpoint(FibonacciService fibonacciService) { this.fibonacciService = fibonacciService; }
@Override public long term(int n) { return fibonacciService.term(n); }}
复制代码


这里用 @RestSchema 和 @RpcSchema 注释两个端点后,ServiceComb 会自动生成对应的服务端点契约,根据如下 microsevice.yaml 配置端点端口,并将契约和服务一起注册到 Service Center(https://github.com/apache/servicecomb-service-center):


# all interconnected microservices must belong to an application wth the same IDAPPLICATION_ID: companyservice_description:# name of the declaring microservice  name: worker  version: 0.0.1# service center addresscse:  service:    registry:      address: http://sc.servicecomb.io:30100  highway:    address: 0.0.0.0:7070  rest:    address: 0.0.0.0:8080

复制代码


最后,提供技工服务应用启动入口,并加上 @EnableServiceComb 注释启用 ServiceComb :


@SpringBootApplication@EnableServiceCombpublic class WorkerApplication {
public static void main(String[] args) { SpringApplication.run(WorkerApplication.class, args); }}


复制代码

告示栏 (Bulletin Board)

告示栏提供为门卫、技工和养蜂人注册联系方式的设施,同时经理和养蜂人可通过此设施查询注册方的联系方式,以方便匹配能力的提供和消费。


Service Center 提供契约和服务注册、发现功能,而且校验服务提供方和消费方的契约是否匹配,我们可以下载(https://github.com/apache/servicecomb-service-center/releases)编译好的版本直接运行。


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


原文链接: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:101357

评论

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

延时任务的几种实现方式

郭儿的跋涉

Java 延时任务 延时消息

使用jdbcSstoragerHandler 处理mysql、oracle 、hive数据

飞哥

智浪

Neil

后浪 智能时代 智浪

你竞争我得利之零售变革

孙苏勇

行业资讯

高效阅读,成就自我-《麦肯锡精英高效阅读法》读后感

顾强

读书笔记 读书 读书方式

交易上链——中心化数字资产交易所的完美解决之道

Tux Hu

区块链 智能合约 数字货币 去中心化网络 数字资产

借助第一性原理开启中台建设

数字圣杯

数据中台 数字化转型

反对996,但是选择996是一个怎样的矛盾心态?

顾强

职场 加班

从波音747学项目管理

顾强

项目管理 读书感悟 沟通

编写制度的几点实用建议

石君

制度 编写制度 安全管理

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (五)第一个单元测试

编程道与术

Java 编程 软件测试 TDD 单元测试

认识数据产品经理(三 成为数据产品经理)

马踏飞机747

大数据 数据中台 数据分析 产品经理

业务信息化操作系统(BIOS)——中台的核心产出物

孤岛旭日

中台 操作系统 企业信息化

有了容器为什么kubernetes还需要Pod?

架构师修行之路

Kubernetes 分布式 云原生 pod

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (四)关于单元测试的常见错误观念和做法

编程道与术

Java 编程 软件测试 TDD 单元测试

工作两年简历写成这样,谁要你呀!

小傅哥

面试 小傅哥 简历优化 找工作

通过一个聊天应用学习 Deno

寇云

typescript 后端

编程的门槛 - 抄作业的得与失

顿晓

编程门槛 编程思维 动手能力 抄作业

21天养不成习惯,28天也不行。不要痴心妄想。

赵新龙

TGO鲲鹏会 习惯养成

基于XGB单机训练VS基于SPARK并行预测(XGBoost4j-spark无痛人流解决方案)

黄崇远@数据虫巢

学习 算法

“字节”不断“跳动”,卡拉永远 OK?

无量靠谱

字节跳动 诺基亚 危机

爱是恒久忍耐,又有恩慈

霍太稳@极客邦科技

身心健康 心理

《硅谷革命:成就苹果公司的疯狂往事》读后感

顾强

用SpreadJS实现在线Excel的录入与展示,提升企业医保信息化服务水平

葡萄城技术团队

SpreadJS 医保信息化 在线excel

我常用的在线工具清单

彭宏豪95

效率 效率工具 工具

算法工程师的发展路径

Xue Liang

面向页面的移动端架构设计

Geek_70xtik

flutter ios android 大前端 架构模式

Spring 中不同依赖注入方式的对比与剖析

Deecyn

spring

Dubbo集成Sentinel实现限流

Java收录阁

sentinel

回“疫”录(15):在家SOHO,是你想要的工作方式吗?

小天同学

疫情 回忆录 现实纪录 纪实 远程办公

高仿瑞幸小程序 08 创建第一个云函数

曾伟@喵先森

小程序 微信小程序 大前端 移动

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