https://github.com/alibaba/nacos/releases
Nacos 下载与启动:
- F:\ProgramFiles\nacos\bin>
.\startup.cmd -m standalone
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>${cloud-alibabba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
spring:
application:
name: user-server #应用名
profiles:
active: dev # 环境
cloud:
nacos:
username: nacos
password: nacos
server-addr: 127.0.0.1:8848 # nacos服务地址
config:
file-extension: yaml # 文件后缀名
# discovery:
# cluster-name: XQZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
将
UserApplication
启动多次, 模拟多实例部署,但为了避免 端口冲突,需要修改端口设置:
添加 VM Option:-Dserver.port=8192
启动之后, 在 Nacos
中可以看到 同一个服务的 两个实例:
spring:
cloud:
nacos:
discovery:
cluster-name: XQZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
@SpringBootApplication
@MapperScan("com.tencent.wechat.user.mapper")
public class TencentWechatUserApplication {
public static void main(String[] args) {
SpringApplication.run(TencentWechatUserApplication.class, args);
}
/**
* 开启负载均衡
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* Spring Cloud 自带的负载均衡组件: Ribbon
* @return
*/
@Bean
public IRule randomRule() {
return new RandomRule();
}
}
yml 中添加:
# 设置负载均衡的IRule为 NacosRule,这个规则优先会寻找与自己同集群的服务
user-server:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
- 把 配置信息 迁移到 Nacos 的主要原因是: 能让配置信息 热更新。
- 所以不常改变的 配置 (如 MySQL连接信息) 就没有必要放入到 Nacos 中, 放入 开关类型 的配置。
app-settings:
name: xqz
age: 18
hobby: 烘焙蛋糕
edu_school: 南京医科大学
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
bootstrap.yml 是一个 引导文件, 优先级大于 application.yml, 一定要包含下面这些内容。
spring:
application:
name: user-server #应用名
profiles:
active: dev # 环境
cloud:
nacos:
username: nacos
password: nacos
server-addr: 127.0.0.1:8848 # nacos服务地址
config:
file-extension: yaml # 文件后缀名
discovery:
cluster-name: XQZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
[服务名]-[profile].yaml
: 环境特有 配置文件[服务名].yaml
: 多环境共享 配置文件
Common
) 中引入 openfeign
依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
@EnableFeignClients
注解 开启 Feign
的功能@SpringBootApplication
@MapperScan("com.tencent.wechat.user.mapper")
@EnableFeignClients
public class TencentWechatUserApplication {
public static void main(String[] args) {
SpringApplication.run(TencentWechatUserApplication.class, args);
}
// ...
}
Feign
客户端// 远程调用
@FeignClient(value = "blog-server")
public interface BlogServerClient {
@PostMapping("/blog/Blog/getAllBlog")
ResultData getAllBlog();
}
@Autowired
BlogServerClient blogServerClient;
@PostMapping("getAllBlog")
public ResultData getAllBlog() {
return blogServerClient.getAllBlog();
}
public class DefaultFeignConfiguration {
@Bean
public Logger.Level feignlogLevel() {
return Logger.Level.BASIC;
}
}
设置成 全局配置
[@EnableFeignClients(defaultConfiguration = xxx.class)
]:
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)
public class TencentWechatUserApplication {
public static void main(String[] args) {
SpringApplication.run(TencentWechatUserApplication.class, args);
}
// ...
}
设置成 局部配置
[@FeignClient(configuration = xxx.class)
]:
// 远程调用
@FeignClient(value = "blog-server", configuration = DefaultFeignConfiguration.class)
public interface BlogServerClient {
@PostMapping("/blog/Blog/getAllBlog")
ResultData getAllBlog();
}
直接将 Feign客户端 放在子模块中这样不太好, 我们应该把 Feign客户端 封装在共有模块中, 以便于 子模块 可以 直接调用。
BlogServerClient
、DefaultFeignConfiguration
两个类上面已经给出, 主要是 TESysBlog 这个实体类, 从对应的 子模块 中 直接复制 过来即可。
@EnableFeignClients(basePackages = "xxx.xxx.xxx.xxx")
]@SpringBootApplication
@MapperScan("com.tencent.wechat.user.mapper")
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class,
basePackages = "com.tencent.wechat.common.feign.clients")
public class TencentWechatUserApplication {
public static void main(String[] args) {
SpringApplication.run(TencentWechatUserApplication.class, args);
}
}
四、项目源码
点击前往 Gitee 查看项目源码