版权声明:版权所有,未经许可,不得转载,转载或者引用本文内容请注明来源及原作者
相关文章:
1服务治理
继续上一篇文章的代码来看,我们已经可以实现微服务之间的调用。但是我们把服务提供者的请求地址(ip,端口)等硬编码到了代码中,这种做法存在许多问题,比如:
以上问题是最常见的,如何去解决,这时候就需要通过注册中心动态的实现和管理,这就是服务治理。
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
结合上图来看,微服务架构中,有一个很重要的组件是注册中心,在微服务架构中,起到了协调的作用,注册中心主要包括以下几个功能:
2常见注册中心
3Nacos环境搭建
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,Nacos就是一个注册中心,用来管理提供者和调用者的服务操作,注意,是微服务。
接下来,在我们上面的环境中,引入nacos,并将我们的微服务注册。
搭建步骤:
4将商品微服务注册到nacos
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
@SpringBootApplication
@EntityScan("com.cloud")
@EnableDiscoveryClient
public class LkProductApplication {
public static void main(String[] args) {
SpringApplication.run(LkProductApplication.class, args);
}
}
spring.cloud.nacos.discovery.server-addr=localhost:8848
5将订单微服务注册到nacos
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
@SpringBootApplication
@EntityScan("com.cloud")
@EnableDiscoveryClient
public class LkOrderApplication {
public static void main(String[] args) {
SpringApplication.run(LkOrderApplication.class, args);
}
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
spring.cloud.nacos.discovery.server-addr=localhost:8848
@RestController
@Slf4j
public class OrderController {
@Autowired
RestTemplate restTemplate;
@Autowired
OrderService orderService;
@Autowired
DiscoveryClient discoveryClient;
//生成订单
@GetMapping("/lk/saveOrder/{pid}")
public Order saveOrder(@PathVariable("pid") Integer pid) {
log.info("用户下单" + pid);
ServiceInstance serviceInstance = discoveryClient.getInstances("lk-product").get(0);
String url = serviceInstance.getHost() + ":" + serviceInstance.getPort();
log.info("请求地址为:" + url);
Product product = restTemplate.getForObject("http://"+url+"/lk/getProduct/" + pid, Product.class);
log.info("商品信息为:" + JSON.toJSONString(product));
Order order = new Order();
order.setUserId(1);
order.setUserName("用户1");
order.setProductId(product.getProductId());
order.setProductName(product.getProductName());
order.setProductPrice(product.getProductPrice());
order.setOrderNumber(1);
orderService.saveOrder(order);
return order;
}
}
最后验证微服务是否可以使用,在浏览器中继续访问订单接口:
http://localhost:8003/lk/saveOrder/2