SpringCloud Ablibab之Nacos
Nacos简介
Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理
。
Nacos 帮助可以帮助我们更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
搭建环境
首先添加配置到配置中心
添加配置
这里我是用的是 alibaba 2.1.2
创建父项目
父项目导入依赖
<!--依赖管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR11</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.10.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
创建goods子项目
导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
application.tml配置文件
server:
port: 8801
spring:
application:
name: goods-service
cloud:
nacos:
discovery:
server-addr: 47.100.68.143:8848
bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 47.100.68.143:8848
prefix: goods-service
file-extension: yaml
profiles:
active: dev
主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class GoodsServiceMain8801 {
public static void main(String[] args) {
SpringApplication.run(GoodsServiceMain8801.class,args);
}
}
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
private Long id;
private String name;
private Double price;
}
service层
@Service
public class GoodsService {
public Goods findGoods(){
return new Goods(1L,"MI笔记本5400",5555.0);
}
}
GoodsController
@RestController
@RequestMapping("provider")
public class GoodsController {
@Autowired
private GoodsService goodsService;
@GetMapping("goods")
public Goods findGoods(){
return goodsService.findGoods();
}
}
nacos分布式配置controller
@RefreshScope
@RestController
public class ConfigController {
@Value("${spring.datasource.driver-class-name}")
private String driver;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@GetMapping("config")
public String config(){
return "{driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
创建订单模块
导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
配置文件:
server:
port: 8802
spring:
application:
name: order-service
cloud:
nacos:
discovery:
server-addr: 47.100.68.143:8848
主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class OrdersServiceMain8802 {
public static void main(String[] args) {
SpringApplication.run(OrdersServiceMain8802.class,args);
}
}
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {
private Long id;
private String name;
private Goods goods;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
private Long id;
private String name;
private Double price;
}
RestTemplateConfig
@Configuration
public class RestTemplateConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
OrderController
@RestController
@RequestMapping("consumer")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("order")
public ResponseEntity<Order> findGoods(){
//通过服务id调用服务提供者
Goods goods = restTemplate.getForObject("http://goods-service/provider/goods", Goods.class);
Order order = new Order(100L,"xxx订单",goods);
return ResponseEntity.ok(order);
}
}
启动这两个服务,访问Nacos,出现下面界面说明注册成功
访问8802看远程调用是否成功,出现下面情况则为成功
访问8801服务,测试配置中心是否成功
当我们修改nacos中的配置时,服务中的配置也会同步修改。