zoukankan      html  css  js  c++  java
  • Spring Cloud(2):搭建Eureka

    Eureka Server的搭建:

    使用IDEA工具

    File->New Project->Spring Initializr->next

    Next

     Next->Next创建即可

    修改启动类:

    package org.dreamtech.eureka;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class, args);
        }
    
    }

    进行配置:

    server:
      port: 8761
    eureka:
      instance:
        hostname: localhost
      client:
        # 声明自己是服务端
        register-with-eureka: false
        fetch-registry: false
        # 注册中心地址
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    启动后访问:http://localhost:8761/进入管控台

    由于只有服务端没有客户端,这里显示空

    Eureka Client客户端的搭建:

    正常的创建一个SpringMVC项目:

    Controller:

    package org.dreamtech.product.controller;
    
    import org.dreamtech.product.service.ProductService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/api/product")
    public class ProductController {
    
        private final ProductService productService;
    
        @Autowired
        public ProductController(ProductService productService) {
            this.productService = productService;
        }
    
        @RequestMapping("/list")
        public Object list(){
            return productService.getProductList();
        }
    
        @RequestMapping("/find")
        public Object findById(@RequestParam("id") int id){
            return productService.findById(id);
        }
    
    }

    Service:

    package org.dreamtech.product.service;
    
    import org.dreamtech.product.domain.Product;
    
    import java.util.List;
    
    public interface ProductService {
        List<Product> getProductList();
        Product findById(int id);
    }
    package org.dreamtech.product.service.impl;
    
    import org.dreamtech.product.domain.Product;
    import org.dreamtech.product.service.ProductService;
    import org.springframework.stereotype.Service;
    
    import java.util.*;
    
    @Service
    public class ProductServiceImpl implements ProductService {
        // 模拟DAO层操作
        private static final Map<Integer, Product> productDao = new HashMap<>();
    
        static {
            Product p1 = new Product(1, "iPhone1", 1111, 10);
            Product p2 = new Product(2, "iPhone2", 2222, 10);
            Product p3 = new Product(3, "iPhone3", 3333, 10);
            Product p4 = new Product(4, "iPhone4", 4444, 10);
            Product p5 = new Product(5, "iPhone5", 5555, 10);
            Product p6 = new Product(6, "iPhone6", 6666, 10);
            Product p7 = new Product(6, "iPhone7", 7777, 10);
            productDao.put(1, p1);
            productDao.put(2, p2);
            productDao.put(3, p3);
            productDao.put(4, p4);
            productDao.put(5, p5);
            productDao.put(6, p6);
            productDao.put(7, p7);
        }
    
        @Override
        public List<Product> getProductList() {
            Collection<Product> temp = productDao.values();
            return new ArrayList<>(temp);
        }
    
        @Override
        public Product findById(int id) {
            return productDao.get(id);
        }
    }

    商品实体类:

    package org.dreamtech.product.domain;
    
    import java.io.Serializable;
    
    public class Product implements Serializable {
        //ID
        private int id;
        //商品名称
        private String name;
        //商品价格
        private int price;
        //商品库存
        private int store;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        public int getStore() {
            return store;
        }
    
        public void setStore(int store) {
            this.store = store;
        }
    
        public Product(int id, String name, int price, int store) {
            this.id = id;
            this.name = name;
            this.price = price;
            this.store = store;
        }
    }

    启动项目,访问:http://localhost:8080/api/product/list

    响应如下说明成功:

    [{
        "id": 1,
        "name": "iPhone1",
        "price": 1111,
        "store": 10
    }, {
        "id": 2,
        "name": "iPhone2",
        "price": 2222,
        "store": 10
    }, {
        "id": 3,
        "name": "iPhone3",
        "price": 3333,
        "store": 10
    }, {
        "id": 4,
        "name": "iPhone4",
        "price": 4444,
        "store": 10
    }, {
        "id": 5,
        "name": "iPhone5",
        "price": 5555,
        "store": 10
    }, {
        "id": 6,
        "name": "iPhone6",
        "price": 6666,
        "store": 10
    }, {
        "id": 6,
        "name": "iPhone7",
        "price": 7777,
        "store": 10
    }]

    引入Eureka:

    server:
      port: 8771
    # 指定注册中心地址
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    # 服务的名称
    spring:
      application:
        name: product-service

    IDEA模拟启动多个服务:

    访问:http://localhost:8761/

    如果显示如上图,说明搭建成功

    如果出现这些红字: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.

    关闭自我保护:

      server:
        enable-self-preservation: false
  • 相关阅读:
    android开发布局三(微信布局)
    Android开发adb,SQLite数据库运用
    直线电机磁负荷、电负荷
    MIT公开课(一):电场和偶极子
    哈工大电气工程系硕士研究生入学复试——自动控制原理1、2章
    直线电机与旋转电机的区别
    Math类介绍
    Scala编辑器和IntelliJ IDEA开发环境配置
    减少cpu的方法
    AS内存清理,建议以及查找内存泄露的方法
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/10861541.html
Copyright © 2011-2022 走看看