zoukankan      html  css  js  c++  java
  • Spring Cloud 中注册中心Eureka客户端配置

    注册中心配置客户端(注册一个虚拟的商品服务)

    一、新建项目:

        1、创建一个SpirngBoot应用,增加服务注册和发现依赖

        2、模拟商品信息,存储在内存中

        3、开发商品列表接口,商品详情接口

        4、配置文件加入注册中心地址

          

    二、操作方法:

    1、file->new->project

        Spring Initializer ->default

            点击next

    2、输入

        Group             项目名称一般为因为小写字母和数字结合

        Artifact        具体组件 小写字母组合 product_server

        Type             选择 Maven Project

        其他的默认

            点击next

    3、选择web

        勾选web

    3、选择Cloud Discovery (服务发现)

        勾选Eureke Discovery

        默认选择 spring boot版本

        点击next

    4、点击Finish

    5、点击New windows

    6、在file下setting-> Maven 设置Maven home directory 设置为maven

                        User setting file 设置为本地Maven中的setting

    7、在新建项目的入口侧同时建一个controller(src->main->java->???右键点击)

        new->package(命名为controller),再建一个domain包 和一个service包

        在controller包下新建一个JAVA Class ,右键点击controller new->class 命名为ProductController

        进入JAVA文件

        增加两个引入

            @RestController

            @RequestMapping("/api/v1/product")

        注意:alt+insert 和alt+enter的使用

              

        在domain包下新建一个JAVA Class (实体类),右键点击domain new->class 命名为Product(类名首字母为大写,对象为驼峰命名方式)

        在JAVA类中 product类定义后增加序列化implements Serializable

        增加类定义

         public Product(){}

    public Product( int id ,String name,int price,int store){

    this.id=id;

    this.name=name;

    this.price=price;

    this.store=store;

    }

       

        输入商品定义

         private int id;

    /**

    * 商品名称

    */

    private String name;

    /**

    * 价格 单位为 分

    */

    private int price;

    /**

    * 库存

    */

    private int store;

        在下方右键,点击genarate.. 选择 getter和setter 后选择所有属性,点击OK

          

        在service包下新建一个JAVA Class (实体类),右键点击service new->class 命名为ProductService

        进入类中:

            修改class 为interface

              

                实现中增加代码,并增加相应的类(alter+enter)

                List<Product> listProduct();

       

                Product findById(int id);

        在service包下新建一个impl的包

            在impl包下新建一个JAVA Class (实体类),右键点击impl new->class 命名为ProductServiceImpl

            进入类中:    加入注解@Service

            在class后面输入 implements ProductService

             alt+insert选择 Override Methods

             增加内存数组

         private static final Map<Integer, Product> daoMap=new HashMap<>();

    static{

    Product p1=new Product(1,"iphoneX",2,3);

    Product p2=new Product(2,"电脑",2,3);

    Product p3=new Product(3,"笔记本",2,3);

    Product p4=new Product(4,"音响",2,3);

    Product p5=new Product(5,"三体(书)",2,3);

    Product p6=new Product(6,"衣架",2,3);

    Product p7=new Product(7,"书桌",2,3);

    Product p8=new Product(8,"锅",2,3);

    Product p9=new Product(9,"碗",2,3);

    Product p10=new Product(10,"瓢",2,3);

    Product p11=new Product(11,"盆",2,3);

    Product p12=new Product(12,"椅子",2,3);

    daoMap.put(p1.getId(),p1);

    daoMap.put(p2.getId(),p2);

    daoMap.put(p3.getId(),p3);

    daoMap.put(p4.getId(),p4);

    daoMap.put(p5.getId(),p5);

    daoMap.put(p6.getId(),p6);

    daoMap.put(p7.getId(),p7);

    daoMap.put(p8.getId(),p8);

    daoMap.put(p9.getId(),p9);

    daoMap.put(p10.getId(),p10);

    daoMap.put(p11.getId(),p11);

    daoMap.put(p12.getId(),p12);

       

    }

          

        并在获取商品列表listProduct中增加代码

         Collection<Product> collection=daoMap.values();

    List<Product> list=new ArrayList<>(collection)

    return list;

        在 findById函数中增加;

            return daoMap.get(id);

              

        在controller包的类ProductController中增加两个函数

              

    @Autowired

    ProductService productSevice;

       

    /**

    * 获取所有商品列表

    * @return

    */

       

    @RequestMapping("list")

    public Object list(){

    return productSevice.listProduct();

    }

       

    /**

    * 根据id查看商品详情

    * @param id

    * @return

    */

    @RequestMapping("findByid")

    public Object findByid(@RequestParam("id") int id){

    return productSevice.findById(id);

    }

        运行后验证

            通过这个访问商品列表

            http://localhost:8080/api/v1/product/list

            查看id为2的商品详情

            http://localhost:8080/api/v1/product/findByid?id=2

        通过后准备注册Eureka客户端

    8、找到src->main->resources->application.properties修改名为application.yml

                    右键 refactor->rename录入application.yml

                    点击refactor    

        并在其中增加配置

        #服务端口设置

    server:

    port: 8765

    #注册中心地址

    eureka:

    client:

    service-url:

    defaultZone: http://localhost:8761/eureka

    #服务名称

    spring:

    application:

    name: product-service

    9、启动上次的eurekaserver后启动本次productservice

        http://localhost:8761/打开可以看到服务中增加PRODUCT-SERVER

        在启动一个服务

              

            在product-service项目中运行请修改配置(运行项目左侧可以选择editconfigrations)

                将Single instance only的去掉对勾

                并在VM option中增加 -Dserver.port=8766

                再次启动项目,在注册中心中可以看到两个服务注册了

    10、删除eureka服务器的报错    

        1)、eureka管理后台出现一串红色字体:是警告,说明有服务上线率低

     

        EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

     

        关闭检查方法:eureka服务端配置文件加入

        server:

        enable-self-preservation: false

    注意:自我保护模式禁止关闭,默认是开启状态true

        2)、为什么只加一个注册中心地址,就可以注册,因为有了引用就可以自动注册

        By having spring-cloud-starter-netflix-eureka-client on the classpath, your application automatically registers with the Eureka Server. Configuration is required to locate the Eureka server, as shown in the following example:

    11、增加一些配置

        在findById中的返回中能够看到port

            ProductController 中增加

                @Value("${server.port}")

                private String port;

            并在findById函数中增加

            Product product=productSevice.findById(id);

    Product result=new Product();

    BeanUtils.copyProperties(product,result);

    result.setName(result.getName()+"data from port:"+port);

    return result;  

  • 相关阅读:
    CentOS7----Linux Root忘记,进入救援模式更改密码(两种方法!)
    Linux/CentOS7install PackageError: Loaded plugins: fastestmirror
    LinuxCentOSamba7关闭SELinux重新启动失败出现:Failed to load SElinux policu freezing
    Github Page + Hexo 搭建个人博客
    Selenium的使用
    Linux下使用Selenium进行自动化测试
    Python学习-网络编程
    Python学习-多线程和多进程
    Python学习-从面向对象开始
    Linux安装Jupyter并且远程访问
  • 原文地址:https://www.cnblogs.com/programer-xinmu78/p/10492380.html
Copyright © 2011-2022 走看看