springcloud学习记录-Alibaba Nacos服务注册和配置中心
Nacos就是注册中心+配置中心的组合:
Nacos = Eureka+Config+Bus
nacos的服务注册:
建立两个服务端,端口为9001,9002
pom:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.lbl.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
yml:
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: '*'
controller层:
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverport;
@RequestMapping("payment/nacos/{id}")
public String getPayment(@PathVariable Integer id){
return "paymentPort:"+serverport+"id"+id;
}
}
主启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
访问http://localhost:9001/payment/nacos/1
nacos注册列表下就会出现9001的注册信息,9002同理。
之后建立消费端工程:
pom和服务端一样:
yml:
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
service-url:
nacos-user-service: http://nacos-payment-provider
配置类:
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
};
}
controller层:
@RestController
@Slf4j
public class OrderNacosController {
@Resource
public RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping("/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id){
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
主启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain83 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain83.class,args);
}
}
两个服务端和一个客户端注册成功:
然后客户端来访问:
http://localhost:83/consumer/payment/nacos/13
可以看见轮询的负载均衡效果。
原因:spring-cloud-starter-alibaba-nacos-discovery依赖包含了ribbon。
nacos作为配置中心:
首先建立配置中心项目:
pom:
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基础配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
bootstrap.yml:
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
# group: TEST_GROUP
# namespace: 8ec2c66a-bd90-4758-8da7-6900f1d52e2e
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
application.yml:
spring:
profiles:
# active: test #测试环境
active: dev #表示开发环境
controller层:
@RestController
@RefreshScope//支持Nacos的动态刷新
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
主启动:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class,args);
}
}
nacos上配置:
{spring.application.name}-{spring.profile.active}.{spring.cloud.nacos.config.file-extension}
对应这个Data-ID
启动配置中心:
访问:http://localhost:3377/config/info
得到配置中心的内容:
并且自带动态刷新的功能,修改config后再次访问就可以得到修改的内容,不用重启项目。
方案有三个可以修改的地方:
Namespace方案+Group方案+DataID方案
Namespace方案:新建DataID时对应配置文件application.yml里的
(1)DataID方案:
spring:
profiles:
# active: test #测试环境
active: dev #表示开发环境
对应
(2)Group方案:
bootstrap.yml里的:
对应:
配置中心的:
(3)Namespace方案:
bootstrap.yml:
对应配置中心的:
上一篇: 七、Gateway新一代网关
下一篇: Gateway新一代网关
推荐阅读
-
springCloud使用Nacos作为服务发现与注册中心,配置中心
-
SpringCloud + Nacos 做服务注册与配置中心
-
Nacos作为微服务注册中心和配置中心详解
-
Nacos 作为服务注册中心和配置中心 简单Demo
-
Nacos作为微服务架构的注册发现中心和配置中心
-
Spring Cloud Alibaba 整合nacos作为注册中心和配置中心
-
Spring Cloud Alibaba:Nacos 作为注册中心和配置中心使用
-
Spring Cloud Alibaba配置Nacos,作为注册中心和配置中心
-
springcloud学习记录-Alibaba Nacos服务注册和配置中心
-
18.SpringCloud Alibaba Nacos服务注册和配置中心