搭建Nacos 注册中心和配置中心 以及Feign远程调用
记录:开发过程中,搭建nacos注册中心,配置中心以及openfeign远程调用其他微服务模块等基本操作
一、Nacos下载安装
Nacos官网:https://nacos.io/zh-cn/index.html
下载地址:https://github.com/alibaba/nacos/releases
中文官网文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
安装并运行Nacos
1.本地已成功安装Java8+Maven环境
2.先从官网下载Nacos,解压安装包,直接双击运行bin目录下的startup.cmd
3.运行成功后直接访问:http://localhost:8848/nacos(用户名/密码默认都是nacos)
二、Nacos注册中心
Nacos注册中心演示 Demo:https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md
1、首先 pom.xml 文件,引入 Nacos Discovery Starter依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、在应用的 /src/main/resources/application.yml(或者application.properties) 配置文件中配置 Nacos Server 的端口号,名称和地址
server:
port: 8000 # 端口号
spring:
application:
name: test-name # 微服务名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # 配置Nacos地址
3、启动类上使用 @EnableDiscoveryClient 注解开启服务注册与发现功能
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册与发现
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
三、Nacos配置中心
Nacos配置中心演示 Demo:https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md
1、首先 pom.xml 文件,引入 Nacos Config Starter依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、创建bootstrap.properties配置文件(项目启动首先加载此配置文件,如果不需要nacos提供的config请忽略此配置文件并在application.properties中添加添加服务名 spring.application.name=service-provider)
# 配置 nacos配置中心 服务名和地址
spring.application.name=nacos-config-name
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#命名空间
spring.cloud.nacos.config.namespace=dev
#组名
spring.cloud.nacos.config.group=service-provider
#其他扩展配置文件
#配置文件dataid
spring.cloud.nacos.config.ext-config[0].data-id=redis.properties
#组名group
spring.cloud.nacos.config.ext-config[0].group=service-provider
#实时刷新
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=jdbc.properties
spring.cloud.nacos.config.ext-config[1].group=service-provider
spring.cloud.nacos.config.ext-config[1].refresh=true
3、当前命名空间为dev、实际开发中可创建test、prod等,在不同的环境用于切换配文件
在nacos配置中心默认添加一个叫 数据集(Data Id),默认命名规则:应用名.properties。例如:mall.properties
4、给 应用名.properties 添加任何配置,例如 name 和 age
5、动态获取配置,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment 的 PropertySources 中。这里我们使用 @Value 注解来将对应的配置注入, @RefreshScope 注解开启动态刷新功能
用法:
@Value("${properties 文件中配置项的名}"):获取到配置属性名
@RefreshScope:动态获取并刷新配置
@RefreshScope //开启动态刷新
class SampleController {
@Value("${user.name}")
String userName;
@Value("${user.age}")
int age;
}
注意:如果nacos配置中心的配置文件( 应用名.properties )和当前应用的配置文件 (application.properties )中都配置了相同的项,优先使用配置中心的配置
总结:
1)命名空间:利用命名空间来做环境隔离
默认:public(保留空间);默认新增的所有配置都在public空间;一般会添加:开发,测试,生产
注意:在bootstrap.properties配置上,需要注明使用哪个命名空间下的配置
例如:spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
建议:可以为每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
2)配置集ID(Data ID):一般会使用微服务名称
3)配置分组:默认所有的配置集都属于:DEFAULT_GROUP;
项目中的使用:通常使用配置分组区分环境:dev,test,prod
4)同时加载多个配置集
①微服务任何配置信息,任何配置文件都可以放在配置中心中
②只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
③通过@Value,@ConfigurationProperties 等相关注解注入配置
四、Feign远程调用
1、首先 pom.xml 文件,引入 feign 依赖
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2、在application.yml进行配置
server:
port: 8000 # 端口号
spring:
application:
name: member # 服务名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos地址
3、启动类添加 @EnableFeignClients 注解
@EnableFeignClients(basePackages = "com.member.feign") //开启远程调用,扫描feign接口的包路径
@EnableDiscoveryClient //服务注册与发现
@MapperScan("com.member.dao") // mapper接口扫描
@SpringBootApplication
public class MemberApplication {
public static void main(String[] args) {
SpringApplication.run(MemberApplication.class, args);
}
}
4、在需要远程调用其他微服务的微服务模块中,创建feign接口,使用 @FeignClient(被调用微服务的nacos注册名称) 注解
这里的包路径则是启动类上@EnableFeignClients(basePackages = “com.member.feign”) 扫描的路径
@FeignClient("service-provider") //被调用微服务的nacos注册名称
public interface FeignService {
@RequestMapping("/hello")
public String hello();
}
5、controller使用
@RestController
public class MemberController {
@Autowired
private FeignService feignService;
@RequestMapping("/test")
public String test() {
return "test : "+feignService.hello();
}
}
总结:
远程调用别的微服务
1)在pom.xml文件引入open-feign 依赖
2)编写一个接口,上面写上需要调用远程服务接口(除了方法体,其他都从被调用的微服务中复制过来)
3)开启远程调用功能