微服务:nacos集群与feign取代restTemplate
使用@RefreshScope注解可以实现服务的热更新。
服务处于启动状态修改,Nacos配置管理可以让服务立刻热更新。如:将yyyy-MM-dd HH:mm:ss改成yyyy年MM月dd日 HH:mm:ss
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Value("${pattern.dateformat}")
String dateformat;
@GetMapping("/now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat()));
}
}
第二种方式实现,首先采用读取配置文件的方式完成属性注入,而非直接写死。
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
String dateformat;
}
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
PatternProperties patternProperties;
@GetMapping("/now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
}
}
Nacos的多环境配置
微服务启动时,从nacos读取多个配置文件
- 同名的带有环境的配置文件,如:userservice-dev.yaml
- 与服务同名的配置文件,如:userservice.yaml
因此,可以将多环境锁共有的配置写在第二类配置文件中。
优先级:第一类>第二类>本地编写的配置文件。
配置nacos集群
集群搭建步骤:
-
搭建MySQL集群并初始化数据库表
-
下载解压nacos
-
修改集群配置(节点信息)、数据库配置
-
分别启动多个nacos节点
-
nginx反向代理
使用Feign代替restTemplate
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 在启动类上加入自动装配注解
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {}
- 创建接口
@FeignClient("userservice") //请求路径,为配置时输入的服务名称。
public interface UserClient {
@GetMapping("/user/{id}")//参数列表
User findById(@PathVariable("id") Long id);//返回值类型
}
- 重写service层
@Autowired
UserClient userClient;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.用Feign远程调用
User user = userClient.findById(order.getUserId());
// 3.封装到order里
order.setUser(user);
// 4.返回
return order;
Feign的自定义配置,以自定义日志配置举例:
Feign的日志配置:
-
方式一是配置文件,feign.client.config.xxx.loggerLevel
-
如果xxx是default则代表全局
-
如果xxx是服务名称,例如userservice则代表某服务
-
-
方式二是java代码配置Logger.Level这个Bean
-
如果在@EnableFeignClients注解声明则代表全局
-
如果在@FeignClient注解中声明则代表某服务
-

浙公网安备 33010602011771号