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

阅读数:3 2019 年 12 月 25 日 18:10

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

技工 (Worker)

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

黄金分割运算服务

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

复制代码
value = fibo(n)

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

复制代码
interface FibonacciService {
long term(int n);
}
@Service
class 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")
@Controller
public 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 ID
APPLICATION_ID: company
service_description:
# name of the declaring microservice
name: worker
version: 0.0.1
# service center address
cse:
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
@EnableServiceComb
public 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

评论

发布