将商品微服务注册到nacos
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring
Cloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config。
nacos的作用就是一个注册中心,用来管理注册上来的各个微服务
使用方法
导入jar包依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在application.yml 配置文件加入
spring:
datasource:
url: jdbc:mysql://localhost:3306/spring-clood?serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
application:
name: shop-order
cloud:
nacos:
discovery:
server-addr: localhost:8848
运行主启动类
将订单微服务注册到nacos
加入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在主启动类上加入
@EnableDiscoveryClient //开启nacos的注解
在配置文件中加入
# 配置nacos注册中心的地址
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
修改controller代码
package com.xp.order.controller;
import com.xp.entity.ShopOrder;
import com.xp.entity.ShopProduct;
import com.xp.order.mapper.OrderMapper;
import com.xp.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
/**
* @program: springcloud1
* @description:
* @author: 许鹏
* @create: 2021-07-06 16:14
**/
@RestController
@RequestMapping("order")
public class orderController {
@Resource
private OrderService orderService;
@Resource
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("saveOder")
public String saveOrder(Long pid, Integer num){
ShopOrder shopOrder = new ShopOrder();
shopOrder.setNumber(num);
shopOrder.setUid(1);
shopOrder.setUsername("许鹏");
shopOrder.setPid(pid);
List<ServiceInstance> instances = discoveryClient.getInstances("shop-product");
ServiceInstance instance = instances.get(0);
ShopProduct forObject = restTemplate.getForObject(instance.getUri()+"/product/findById/" + pid, ShopProduct.class);
shopOrder.setPname(forObject.getPname());
shopOrder.setPprice(forObject.getPprice());
orderService.saveOrder(shopOrder);
return "下单成功";
}
}