简介 Nacos 注册中心
2.1 注册中心原理

2.2 Nacos——SpringAlibaba
2.2.1 nacos 的安装与配置(docker 环境)
nacos 需要存储一定的数据,提前创建好数据库
在docker系统中安装 nacos 服务,需要提前配置好数据库相关信息并挂载
nacos 配置文件 custom.env
▼env复制代码PREFER_HOST_MODE=hostname MODE=standalone SPRING_DATASOURCE_PLATFORM=mysql MYSQL_SERVICE_HOST=192.168.117.129 MYSQL_SERVICE_DB_NAME=nacos MYSQL_SERVICE_PORT=3306 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=123 MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
dockers 下载并安装命令
▼bash复制代码docker run -d \ --name nacos \ --env-file ./nacos/custom.env \ -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ --restart=always \ nacos/nacos-server:v2.1.0-slim
2.2.2 服务注册
注册步骤
-
引入依赖
▼xml复制代码<!--nacos 服务注册发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> -
配置 nacos 地址
▼yaml复制代码spring: application: name: item-service # 服务名称 cloud: nacos: server-addr: 192.168.150.101:8848 # nacos地址 -
在 SpringBoot 的启动类中添加注解 @EnableDiscoveryClient,开启 nacos 服务发现功能
▼java复制代码@SpringBootApplication @EnableDiscoveryClient public class ItemApplication { public static void main(String[] args) { SpringApplication.run(ItemApplication.class, args); } }
2.2.3 DiscoveryClient 调用 Http 请求
-
创建对象
▼java复制代码//注册 DiscoveryClient 对象,该对象是 nacos 包中定义好的,直接引用即可 private final DiscoveryClient discoveryClient; // 根据注册服务名称,获取注册列表 List<ServiceInstance> instances = discoveryClient.getInstances("item-service"); //手动实现负载均衡,并选择访问哪个实例服务 ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size())); -
远程调用
▼java复制代码// 由于不知道访问具体哪一台服务器,所以请求中的路径要动态获取 ResponseEntity<List<ItemDTO>> response = restTemplate.exchange( instance.getUri()+"/items?ids={ids}", HttpMethod.GET, …… );
2.3 OpenFeign
OpenFeign 用于简化传统跨服务调用(Nacos+DiscoveryClient 远程调用),通过==接口化方式+代理+反射==实现Http 请求
使用 OpenFeign 步骤:
-
导入相关依赖
▼xml复制代码<!--openFeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--负载均衡器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> -
在 SpringBoot 的启动类中添加注解 @EnableFeignClients,开启 OpenFeign 服务发现功能
▼java复制代码@SpringBootApplication @EnableFeignClients // 开启OpenFeign功能 public class ItemApplication { public static void main(String[] args) { …… } } -
编写 OpenFeign 客户端(接口)
▼java复制代码// @FeignClient:根据服务名称,拉取实例列表 @FeignClient("item-service") public interface ItemClient{ @GetMapping("/items") List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids) } -
使用 FeignClient,实现远程调用
▼java复制代码// 导入自定义的 OpenFeign 客户端接口 private final ItemClient itemClient; // 调用接口中的方法,接口返回值是json格式,但 OpenFeign 使用反射进行类型转换 List<ItemDTO> items = itemClient.queryItemByIds(itemIds);
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
黑马 Elasticsearch,ik分词插件安装失败
4
Day 19:
跟练微服务-黑马商城项目(P37~P42),学完了哨兵机制组件sentinel
但感觉黑马这部分讲的不太好,实际应用场景可能不太符合这类机制的触发场景
下阶段分布式事务,等好久啦
3
Day 18:
跟练微服务-黑马商城项目(P27~P36),网关、配置管理全部学完并整理了笔记
明天开始学习微服务高级功能:雪崩的解决方案、分布式事务等
4
Day17:
这几天都忘了打卡了,但脚步未停
学习微服务结合黑马商城(P10~P26)进行到网关了,加油
2
Day16:
这两天来活了,瞎忙,没多少时间学习
学习Myabtis-Plus中分页插件的使用
整理完善最近学习知识点的笔记
感觉java技术栈对工作效率提升不是很明显,学的知识很难运用在日常的工作上
只能靠多练网上的项目来巩固技术
4
