50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

完整微服务化示例:使用 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:101551

评论

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

跟着卷卷龙一起学Camera--PDAF 03

卷卷龙

ISP camera 10月月更

【结构体内功修炼】枚举和联合的奥秘(三)

Albert Edison

C语言 枚举 结构体 10月月更 联合

代码开发篇之设计模式

邱学喆

设计模式

代理模式与动态代理

闫同学

10月月更

玩转子网划分和超网汇聚

闫同学

10月月更

Spring循环依赖原理和Bean创建过程

闫同学

10月月更

跟着卷卷龙一起学Camera--PDAF 04

卷卷龙

ISP camera 10月月更

一文带你搞懂HTTP和HTTPS

闫同学

10月月更

手把手教你搭建Spring Boot+Vue前后端分离

闫同学

10月月更

当UI走查说页面色值错误时,先别急着检查代码

茶无味的一天

前端 浏览器 UI 色差 取色

开发者有话说 | 求知若饥,虚心若愚

Samson

程序员 个人成长 10月月更 成长感悟

我是如何学习一门新技术的

闫同学

10月月更

从0开始,让你的Spring Boot项目跑在Linux服务器

闫同学

10月月更

跟着卷卷龙一起学Camera--CMS

卷卷龙

ISP camera 10月月更

数据仓库的下一阶段该是什么?

雨果

数据仓库

实时数仓、数据中台、大数据平台、湖仓一体各有什么区别?

雨果

数据中台

MFC|MediaPlayer基本功能使用

中国好公民st

c++ qt 10月月更

浅谈Docker底层原理

闫同学

10月月更

玩转Docker—部署Spring Boot+MySQL工程实战

闫同学

10月月更

一文搞懂布隆过滤器(BloomFilter)

闫同学

10月月更

浅谈MVC、MVP、MVVM框架模式

闫同学

10月月更

图像渲染

掘金安东尼

算法 10月月更

如何编写一个原生 Web Components 组件

茶无味的一天

CSS JavaScript html5 前端

翻译翻译,什么是滑动窗口

闫同学

10月月更

十一假期,分享几个好玩儿的GitHub项目

闫同学

10月月更

实时数仓、湖仓一体、流批一体有什么区别

雨果

实时数仓

【愚公系列】2022年10月 Go教学课程 021-Go容器之切片操作

愚公搬代码

10月月更

Python应用之哥德巴赫猜想——偶数

芯动大师

10月月更 哥德巴赫猜想 Python应用

深度思考:到底什么是抽象?

闫同学

10月月更

Python应用之激活码生成器

芯动大师

Python语法 10月月更 激活码生成器

SQL高效查询建议

雨果

sql

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