之七 2流高手速成记:基于Dubbo&Nacos的微服务简要实现( 二 )


之七 2流高手速成记:基于Dubbo&Nacos的微服务简要实现

文章插图
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.example</groupId><artifactId>dubbo-nacos-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency>consumer作为外部可访问的web服务,自然需要持有web相关依赖项
同时,与provicer相同,其与api模块保持依赖关系
package com.example.dubbonacosconsumer.controller;import com.example.dubbonacosapi.model.Person;import com.example.dubbonacosapi.service.PersonService;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@RequestMapping("/person")public class PersonController {@DubboReferencePersonService service;@PostMapping("/insert")public Integer insert(Person person) {return service.insert(person);}@PostMapping("/update")public Integer update(Person person) {return service.update(person);}@PostMapping("/delete")public Integer delete(int id) {return service.delete(id);}@GetMapping("/select")public List<Person> select() {return service.select();}}留意PersonService的引入方式:不再是@Autowired,而是变更为@DubboReference —— 这是唯一的区别!
4. Consumer和Provider的配置项这里我们依然沿用上一节讲到的知识——以nacos作为配置中心
二者同时仅在本地保留一个bootstrap.properties配置文件,application.properties托管给nacos
之七 2流高手速成记:基于Dubbo&amp;Nacos的微服务简要实现

文章插图
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html# Nacos认证信息spring.cloud.nacos.config.username=nacosspring.cloud.nacos.config.password=nacosspring.cloud.nacos.config.contextPath=/nacos# 设置配置中心服务端地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# Nacos 配置中心的namespace 。需要注意,如果使用 public 的 namcespace  , 请不要填写这个值,直接留空即可# spring.cloud.nacos.config.namespace=# 应用名称spring.application.name=dubbo-nacos-consumer# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html# Nacos认证信息spring.cloud.nacos.config.username=nacosspring.cloud.nacos.config.password=nacosspring.cloud.nacos.config.contextPath=/nacos# 设置配置中心服务端地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# Nacos 配置中心的namespace 。需要注意,如果使用 public 的 namcespace  , 请不要填写这个值,直接留空即可# spring.cloud.nacos.config.namespace=# 应用名称spring.application.name=dubbo-nacos-provider内容均为nacos相关配置 , 以及各自声明了自己的应用名称(spring.application.name)
然后是他们在nacos上托管的配置数据:
之七 2流高手速成记:基于Dubbo&amp;Nacos的微服务简要实现

文章插图
注意,新创建配置的Data Id需要与他们的应用名称同名
之七 2流高手速成记:基于Dubbo&amp;Nacos的微服务简要实现

文章插图
provider需要持有mysql相关配置
之七 2流高手速成记:基于Dubbo&amp;Nacos的微服务简要实现

文章插图
consumer作为controller的持有者,需要声明外部的可访问端口
全部的移植工作到这里就完毕了!
我们分别执行provider、consumer两个独立进程
此时我们打开nacos服务列表,会看到dubbo-nacos-consumer、dubbo-nacos-provider两个执行中的服务
之七 2流高手速成记:基于Dubbo&amp;Nacos的微服务简要实现

文章插图
执行结果如下:
之七 2流高手速成记:基于Dubbo&amp;Nacos的微服务简要实现

文章插图
怎么样?是不是非常神奇?我们只改动了两个注解,原本还是一个整体的工程就被一分为二了 , 并且是两个可以彼此独立运转在两台独立机器上的服务
—— 这就是微服务的神奇之处!
借助于强大的SpringCloudAlibaba,我们不仅可以对所有的业务实现统合拆分 , 充分调动团队人员配置各司其职各自编写自己的服务模块,
更大的意义在于我们可以充分调动多台独立设备的技能,使之串联为一个庞大服务集群,较之于单台机器实现整个架构性能成千上万倍的飞跃!
但是,微服务带来研发、管理、性能便捷的同时,整个集群也在运维层面面对了前所未有的挑战 , 最明显的:
consumer在业务上依赖于后端的provider,如果provider运转不正常 , 前方的consumer又该如何自处?!

推荐阅读