Windows安装使用Nacos并进行服务治理

Nacos简介

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos其实就是一个注册中心,用来管理和注册微服务

搭建Nacos环境

安装nacos(版本1.1.4)

下载网址 https://github.com/alibaba/nacos/releases/tag/1.1.4

下载zip文件

下载本地解压缩

启动nacos

双击启动文件

发现启动不起来,根本没有反应

使用命令启动 startup.cmd也不行

解决问题

问题发现我的环境变量名叫JAVA_HOMO不叫JAVA_HOME 改过来之后重启发现已经解决成功

这时候命令启动也可以了

访问http://localhost:8848/nacos/#/login,出现以下页面代表成功

账号密码都是nacos 进行登录

Nacos实战入门

将商品微服务注册到nacos

修改shop-product商品微服务模块的代码,将其注册到nacos服务上

1 在pom里面引入nacos依赖



 <!--nacos客户端依赖-->

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

2 在商品微服务shop-produc启动类添加@EnableDiscoveryClient注解

package com.wyh;



import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;



 /**

 *  @program:  springcloud-alibaba

 *  @description:  Product启动类

 *  @author:  魏一鹤

 *  @createDate:  2022-05-01 23:00

 **/



 //开启nacos客户端注解

@EnableDiscoveryClient

@SpringBootApplication

public class ProductApplication {

    public static void main(String[] args){

        SpringApplication.run(ProductApplication.class);

    }

}

3 在application.yml中添加nacos服务的地址



 #端口server:



server:

    port: 8081



 #项目名称



spring:

  application:

    name: service-product



 # 数据库

  datasource:

    driver-class-name: com.mysql.cj.jdbc.Driver

    url: jdbc:mysql://localhost:3306/shop?serverTimezone=GMT&allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=utf8

    username: root

    password: root

 # jpa

  jpa:

    properties:

     hibernate:

      #jpa根据实体创建对应的数据库表.有的话就创建,没有的话就不创建

  hbm2ddl:

          auto: update

      #索引方式

  dialect: org.hibernate.dialect.MYSQL5InnoDBDialect



 #配置nacos服务

 cloud:

    nacos:

      discovery:

        server-addr: localhost:8848

4 启动服务,观察nacos的控制面板上是否有注册上来的商品微服务

服务必须启动才能被注册进入nacos!

商品微服务已经注册到nacos

把订单的微服务也按照相同的步骤进行操作注册到nacos,代码都是一样的

重新启动订单服务,发现也已经被注册到nacos

通过Nacos DiscoveryClient 获取微服务信息进行调用

最后处理订单微服务通过nacos来获取商品微服务的地址,通过注入DiscoveryClient 获取某个具体微服务的信息

  package com.wyh.controller;



import com.alibaba.fastjson.JSON;

import com.wyh.entity.Order;

import com.wyh.entity.Product;

import com.wyh.service.OrderService;

import lombok.extern.slf4j.Slf4j;

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.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;



import java.util.List;



 /**

 *  @program:  springcloud-alibaba

 *  @description:  order controller

 *  @author:  魏一鹤

 *  @createDate:  2022-05-01 22:52

 **/

@RestController

@Slf4j

public class OrderController {

    @Autowired

    private OrderService orderService;

    @Autowired

    private RestTemplate restTemplate;

    @Autowired

    private DiscoveryClient discoveryClient;



    //下单

 @RequestMapping( "/order/prod/{pid}" )

    public Order order(@PathVariable Integer pid) {



        log.info( "接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息" ,pid);

        //调用商品微服务查询商品信息

 //使用用restTemplate调用商品微服务 有两个参数 url访问地址和返回值

 //订单微服务通过nacos调用商品微服务



 //获取商品微服务实例,参数就是nacos客户端服务列表的服务名

 List<ServiceInstance> instances = discoveryClient.getInstances( "service-product" );

       //获取商品微服务

 ServiceInstance serviceInstance = instances.get(0);

        //获取商品微服务地址

 String host = serviceInstance.getHost();

        //获取商品微服务端口

  int port = serviceInstance.getPort();

        //把获取到商品微服务的地址+端口进行嵌入

 Product product = restTemplate.getForObject( "http://" +host+ ":" +port+ "/product/" + pid, Product.class);

        log.info( "查询到{}号商品信息,内容是{}" ,pid, JSON.toJSONString(product));

        //组装order订单信息

 Order order=new Order();

        //用户信息 模拟即可

 order.setUid(1);

        order.setUsername( "测试用户" );

        //商品信息 从查询到的product中获取

 order.setPid(pid);

        order.setPname(product.getPname());

        order.setPprice(product.getPprice());

        //购买数量 模拟即可

 order.setNumber(1);

        //下单 创建订单信息

  orderService.createOrder(order);

        log.info( "创建信息成功,订单信息为:{}" ,JSON.toJSONString(order));

        return order;

    }



}

通过debug的方式发现请求路径拼接没问题

测试结果,没有问题,下单成功

猜你喜欢

转载自blog.csdn.net/weixin_46713508/article/details/131415832