1. 程式人生 > 實用技巧 >SpringCloudAlibaba-服務治理Nacos

SpringCloudAlibaba-服務治理Nacos

一:Nacos簡介

Nacos致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元資料及流量管理。

更多詳情請移步官網(https://nacos.io/zh-cn/docs/quick-start.html)接下來我們就將上述環境中的product、order服務註冊到nacos

二:Nacos環境搭建

2.1:安裝nacos

下載地址: https://github.com/alibaba/nacos/releases
下載zip格式的安裝包,然後進行解壓縮操作

2.2:啟動nacos

#切換目錄
cd nacos/bin
#命令啟動
startup.cmd 
-m standalone

2.3:訪問nacos

開啟瀏覽器輸入http://localhost:8848/nacos,即可訪問服務, 預設密碼是nacos/nacos如下圖

三:將商品(shop-product)微服務註冊到nacos

3.1:在pom.xml中新增nacos依賴

<!--nacos客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.2:在啟動類上新增@EnableDiscoveryClient註解

@SpringBootApplication
@EnableDiscoveryClient //開啟nacos註解
public class ProductApplication {·····}

3.3:在application.yml中新增nacos服務的地址

spring:
  # 配置nacos資訊
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

3.4:啟動商品服務檢視nacos控制面板是否成功註冊

四:註冊shop-order微服務到nacos

和前面shop-product註冊方法一致 故省略、成功後如下圖

改造上篇博文中的下單過程(OrderController)

OrderController注入依賴

//專門負責服務註冊和發現的,我們可以通過它獲取到註冊到註冊中心的所有服務
@Autowired
private DiscoveryClient discoveryClient;

呼叫示例(從nacos取商品服務資訊)

    @GetMapping("/prod/{pid}")
    public Order order2(@PathVariable("pid") Integer pid){
        log.info(">>>客戶下單,呼叫商品微服務查詢商品資訊<<<");

        //從nacos中獲取服務地址 獲取的是個list叢集資訊
        ServiceInstance instance = discoveryClient.getInstances("service-product").get(0);
        String url = instance.getHost() + ":" +instance.getPort();
        log.info(">>從nacos中獲取到的微服務地址為:" + url);
        Product product = restTemplate.getForObject("http://"+url+"/product/"+pid, Product.class);

        log.info(">>商品資訊,查詢結果:" + JSON.toJSONString(product));
        Order order = new Order();
        order.setUid(1);
        order.setUsername("測試使用者1");
        order.setPid(product.getPid());
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(1);
//        orderService.save(order);
        return order;
    }

啟動結果