前言
文章使用的代码在gitee仓库可以自行克隆。
准备工作
1. 使用nacos需要注意版本对应,下面给出本文使用的版本对应关系
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version | Nacos Version |
---|---|---|---|
2.2.1.RELEASE | Spring Cloud Hoxton.SR8 | 2.2.5.RELEASE | 1.2.1 |
2. 创建一个maven项目,在主模块pom文件中加入以下依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3. 创建用户模块 user-service 和订单模块 order-service,在各自的pom文件中分别添加上nacos服务发现和配置依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos-服务注册与发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos-远程配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
4. 从github上下载 nacos 1.2.1,并在本地运行
- nacos 默认启动端口是8848,如果已经被占用,需要修改nacos端口
- 从nacos的bin目录使用下面的命令启动nacos
startup.cmd -m standalone
- 访问:http://localhost:8848/nacos 使用账号:nacos 密码:nacos 登录。新增一个nacos-test命名空间,将我们的服务和配置都放在这个命名空间里
编写测试代码
- 编辑order-service的bootstrap.yml,添加配置
spring:
application:
name: orderservice # nacos的服务名称
profiles:
active: dev # 开发环境,这里是dev
cloud:
nacos:
discovery: #服务注册与发现
server-addr: localhost:8848 #nacos地址
namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public
config: #nacos配置中心
server-addr: localhost:8848 #nacos地址
file-extension: yml # 文件后缀名
namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public
server:
port: 8093 #指定端口
- 编辑user-service的application.yml,添加配置
spring:
application:
name: userservice # nacos的服务名称
profiles:
active: dev # 开发环境,这里是dev
cloud:
nacos:
discovery: #服务注册与发现
server-addr: localhost:8848 #nacos地址
namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public
config: #nacos配置中心
server-addr: localhost:8848 #nacos地址
file-extension: yml # 文件后缀名
namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public
server:
port: 8083 #指定端口
- 在order-service的启动类中为RestTemplate添加@LoadBalanced注解(user-service和这个相同)
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
//交给Bean管理
//@LoadBalanced :让RestTemplate 有负载均衡的能力
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
- order-service编写一个控制类
@RestController
@RefreshScope // 支持热刷新,无需重启项目使nacos上配置更改能应用到项目中
public class OrderController {
@Autowired
private RestTemplate restTemplate;
// 通过从nacos配置中心获取
@Value("${goods}")
private String goods;
@GetMapping("/order")
public String order() {
// 不使用nacos服务注册和发现
// String user = restTemplate.getForObject("http://localhost:8083/getUser/", String.class);
// 使用nacos中ribbon通过微服务名代替ip加端口号 这里访问user-service的微服务
String user = restTemplate.getForObject("http://userservice/getUser/", String.class);
System.out.println("打印订单");
return "订单:" + goods + "===== 购买人:" + user;
}
@GetMapping("/getGoods")
public String getGoods() {
System.out.println("获取商品");
return goods;
}
}
- user-service编写一个控制类
@RestController
@RefreshScope // 支持热刷新,无需重启项目使nacos上配置更改能应用到项目中
public class UserController {
@Autowired
private RestTemplate restTemplate;
// 通过从nacos配置中心获取
@Value("${user}")
private String user;
@GetMapping("/buy")
public String buy() {
// 不使用nacos服务注册和发现
// String user = restTemplate.getForObject("http://localhost:8093/getGoods/", String.class);
// 使用nacos中ribbon通过微服务名代替ip加端口号 这里访问order-service的微服务
String goods = restTemplate.getForObject("http://orderservice/getGoods/" , String.class);
System.out.println("购买商品");
return "用户:" + user + "买了一个:" + goods;
}
@GetMapping("/getUser")
public String getUser() {
System.out.println("获取用户名");
return user;
}
}
启动两个微服务
1. 在naco配置列表页面选择我们之前创建的命名空间,然后创建两个配置文件,dataId命名规则:
${prefix}-${spring.profiles.active}.${file-extension}
2. userservice-dev.yml内容为:
3. orderservice-dev.yml内容为:
4. 启动user-service跟order-service服务,可以在nacos中看到服务:
访问接口调用另一个服务
评论区