微服务-springcloud概览 +(eureka实践, nacos实践)
•
大数据
Spring 体系图

版本关系

版本对应关系wiki
eureka 实践
1 父工程依赖
org.springframework.boot
spring-boot-starter-parent
2.6.14
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
2 搭建Eureka Server
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone:
3 搭建服务提供者
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
spring:
application:
name: eureka-provider
server:
port: 9000
4 搭建消费者
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-consumer
server:
port: 9001
5 服务消费方
5.1 使用RestTemplate 进行RPC调用
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
5.2 真实调用
@GetMapping("/hello/{id}")
public String hello(@PathVariable String id){
return restTemplate.getForObject("http://EUREKA-PROVIDER/hello/"+id, String.class);
}
注意:
@LoadBalanced这个注解一定要加上(org.springframework.cloud.client.loadbalancer)
集群模式:
https://cloud.tencent.com/developer/article/1730733
Naco 实践
1 首先我们需要安装 Nacos Server
可以选用Docker ,但是一定得注意哈这里会有坑,需要暴露三个端口:

docker run -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --name nacos -e "MODE=standalone" -e NACOS_AUTH_IDENTITY_KEY=serverIdentity -e NACOS_AUTH_IDENTITY_VALUE=security -e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 nacos/nacos-server
2 父POM
org.springframework.boot
spring-boot-starter-parent
2.4.2
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2021.1
pom
import
3 服务提供者
server:
port: 8088
spring:
application:
name: ddd-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
4 服务消费者
server:
port: 8089
application:
name: ddd-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-loadbalancer
3.0.1
5 调用方式和上面的一样,使用负载均衡的RestTemplate 进行调用
Nacos 配置管理
1 父工程依赖
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${com.alibaba.cloud.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${com.cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-starter-dubbo
${com.dubbo.version}
com.alibaba.nacos
nacos-common
2.1.0

2 具体模块,引入依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
3 配置bootstrap.yml

写在上面application.yml在较高的版本据说也可以,但是我没有成功,后面测试一下来补充吧。
spring:
application:
name: nacos-dynamic-port
cloud:
nacos:
config:
server-addr:ip:8848
file-extension: yml #这个名字可以自定义 与 配置列表对应就行 官网也有一套命名规则
namespace: 459c3b94-04e8-4de2-8eaa-c55f4a8de1b1 #这里需填工作空间的ID
group: DEFAULT_GROUP
命名規則:

配置列表:

4 验证 你可以在nacos里面修改端口,然然后启动,发现你配置的端口会生效:
@RestController
@RefreshScope 、// 这个注解别忘了这个提供了bean刷新属性的能力
public class ConfigController {
@Value("${server.port}")
private int port;
@RequestMapping("/info")
public String get() {
return "NacosDynamicPortController output, port: " + port;
}
}
修改不同的端口发现info会打印不同的端口,但是特别注意哈我们一般不用来更新端口,因为这个端口改了,但是服务还是在原端口提供服务的

Nacos 拓展配置
1 依赖 和上面一样的 这里不在赘述。
2 配置这里是必须配置在 bootstrap.yml里面。
spring:
application:
name: nacos-dynamic-env
cloud:
nacos:
config:
server-addr: 192.168.0.169:8848
file-extension: properties
namespace: 459c3b94-04e8-4de2-8eaa-c55f4a8de1b1
group: DEFAULT_GROUP
extension-configs[0]:
dataId: demo
refresh: true
fileExtension: yml
group : DEFAULT_GROUP
extension-configs[1]:
dataId: user
refresh: true
fileExtension: yml
group : DEFAULT_GROUP


@RestController
@RefreshScope
public class ConfigController {
@Value("${server.port}")
private int port;
@Value("${demo.val}")
private String val;
@Value("${demo.pwd}")
private String pwd;
@RequestMapping("/info")
public String get() {
return String.format("ConfigController output, port : {%s} val : {%s} pwd : {%s}", port, val, pwd);
}
}
最后输出:可以看到相同的属性后面的配置会覆盖前面。

强烈推荐看一下这篇博文,做了更详细的讲解
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/6356324ec1.html
