一、下载Nacos
https://github.com/alibaba/nacos/releases
二、启动Nacos
解压后双击bin目录下startup.cmd文件启动,注意需要先设置好环境变量JAVA_HOME。
访问 localhost:8848/nacos
账户密码都是:nacos
三、配置Nacos
新建goods和member两个配置文件
goods:
member:
四、创建Spring Boot工程
分别创建goods和member两个工程,用于服务间调用。
1.引入依赖
goods工程:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
member工程:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
</dependencies>
2.修改配置文件
将application.properties,改为 bootstrap.yml
goods:
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos地址
config:
group: test #分组。默认为:DEFAULT_GROUP
namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
prefix: goods #前缀
file-extension: yaml #文件类型
discovery:
namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
application:
name: goods
server:
port: 8081
feign:
hystrix:
enabled: true
member:
spring:
cloud:
nacos:
server-addr: localhost:8848
config:
group: test
namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
prefix: member
file-extension: yaml
discovery:
namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
application:
name: member
server:
port: 18081
feign:
hystrix:
enabled: true
3.新建Controller
Goods工程下:
GoodsController:
@RestController
@RequestMapping("/goods")
@RefreshScope
public class GoodsController {
@Value("${goods:#{null}}")
private String goodsName;
@GetMapping("/getGoods")
@ResponseBody
public String getGoods(){
return goodsName;
}
@Autowired
MemberClient memberClient;
@GetMapping("/getMember")
@ResponseBody
public String getMember(){
return memberClient.getMember();
}
}
Member工程下:
MemberController:
@RestController
@RequestMapping("member")
@RefreshScope
public class MemberController {
@Value("${member:#{null}}")
private String username;
@GetMapping("getMember")
@ResponseBody
public String getMember(){
return username;
}
@Autowired
GoodsClient goodsClient;
@GetMapping("getGoods")
@ResponseBody
public String getGoods(){
return goodsClient.getGoods();
}
}
其中@RefreshScope 用于配置热加载
4.新建Client,用于服务间调用
在goods工程中新建MemberClient ,调用member
@FeignClient(value = "member",fallbackFactory = MemberClientFallbackFactory.class)
public interface MemberClient {
@GetMapping("member/getMember")
String getMember();
}
@Component
public class MemberClientFallbackFactory implements FallbackFactory<MemberClient> {
@Override
public MemberClient create(Throwable throwable) {
return () -> "Member服务异常";
}
}
在member工程中新建GoodsClient ,调用goods
@FeignClient(value = "goods",fallbackFactory = GoodsClientFallbackFactory.class)
public interface GoodsClient {
@GetMapping("goods/getGoods")
String getGoods();
}
@Component
public class GoodsClientFallbackFactory implements FallbackFactory<GoodsClient> {
@Override
public GoodsClient create(Throwable throwable) {
return () -> "Goods服务异常";
}
}
5.启动类加上@EnableFeignClients 注解,启动Feign
6.启动项目
可以看到服务,已经注册到Nacos。