1.文档地址:spring alibaba nacos discovery example
2.创建一个spring boot项目
3.添加nacos discovery依赖
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web启动 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos配置 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
添加配置
##### properties
spring.application.name=producer-server
server.port=10881
##### yaml
spring:
cloud:
nacos:
discovery:
server-addr: local:8848
在代码中添加@EnableDiscoveryClient
@SpringBootApplication
@NacosPropertySource(dataId = "user-producer",autoRefreshed = true)
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
System.out.println("启动成功");
}
}
加一个democontroller
@RestController
@RequestMapping("/user")
public class UserController {
@NacosValue("${user.test.config:测试 nacoas 配置}")
private String nacosConfig;
@GetMapping("/get")
public String get(){
return nacosConfig;
}
}
启动服务就可以在nacos 上看到发布的服务。
4.服务方调用
1)新建一个springboot项目
2)maven依赖与上面一致即可
3)yaml配置 在本地启动的nacos 可以不加配置,配置了application.name 会在nacos服务列表看到一条服务
server:
port: 10890
spring:
application:
name: user-consumer
nacos:
config:
server-addr: localhost:8848
4)注入一个RestTemplate Bean
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
System.out.println("启动成功");
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
5)在democontroller中调用服务
@RestController
@RequestMapping("/user")
public class UserControler {
@Resource
private RestTemplate restTemplate;
@GetMapping("/get")
public String get(){
return restTemplate.getForObject("http://10.10.9.151:10882/user/get",String.class);
}
}
启动服务,在页面调用consumer接口:
如果调用url 用服务名称会抛出异常
在Bean上添加@LoadBalanced注解 即可正常访问。
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
总结:在引用jar的时候由于spring-boot 版本号是2.1.2.RELEASE,spring-cloud-alibaba版本号是2.2.2.RELEASE时 导致服务启动失败。将spring-cloud-alibaba版本号改为2.1.2.RELEASE 可以正常启动。当启动后发现服务没有注册。检查注解是否加上,nacos注册地址是否加上,服务名称是否加上。