SpringCloud-Eureka集群搭建

1.SpringCloud环境搭建

  1. 创建一个maven项目(删除src目录):父工程

  2. 导入相关依赖(jar包)

    <!--打包方式-->
    <packaging>pom</packaging>
    
    <!--    <properties>-->
    <!--        &lt;!&ndash;引入版本号&ndash;&gt;-->
    <!--        <junit.version>4.12</junit.version>-->
    <!--        <lombok.version>1.18.10</lombok.version>-->
    <!--        <log4j.version>1.2.17</log4j.version>-->
    <!--    </properties>-->
    
    <dependencyManagement>
        <dependencies>
            <!--配置SpringCloud的依赖-->
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--配置SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--配置数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.21</version>
            </dependency>
            <!--SpringBoot启动器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.10</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  3. 在创建一个Maven项目:子工程(实体类层)

    1.引入相关jar包

    <!--当前的Module自己需要的依赖,如果父类依赖中配置了版主,这里就不用写了-->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    

    2.连接数据库(mysql)

    3.创建实体类:Dept

    package com.ddf.springcloud.pojo;
    
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
    
    import java.io.Serializable;
    
    //实体类需要序例化
    @Data
    @NoArgsConstructor
    @Accessors(chain = true)    //链式写法
    public class Dept implements Serializable {     //Dept实体类,   orm   类表关系映射
    
        private Long deptno;    //主键
        private String dname;
    
        //这个数据库存在哪个数据库的字段  微服务,一个服务对应一个数据库,同一个信息可能存在不同的数据库
        private String db_source;
    
        public Dept(String dname) {
            this.dname = dname;
        }
        /*
        * 链式写法
        *   Depet dept = new Dept();
        *   dept.setDeptNo(11).setDname('ssss').setDb.source('001')
        *
        * */
    }
    
  4. 在创建一个Maven项目:子工程(供应者)

    1.引入相关jar包

    <dependencies>
        <!--我们需要拿到实体类,所有要配置api  module-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--引用父类的jar包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <!--热部署工具,可以不用频繁的重启项目-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
    

    2.创建application.yml文件,配置相关的配置

    server:
      port: 8001
    
    #mybatis配置
    mybatis:
      type-aliases-package: com.ddf.springcloud.pojo
      configuration-properties: classpath:mybatis/mybatis-config.xml
      mapper-locations: classpath:mapper/*.xml
    
    
    #spring的配置
    spring:
      application:
        name: springcloud-provider-dept
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://localhost:3306/db01?userUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123
    

    3.创建对应的mybatis和mapper文件目录,配置mybatis-config.xml文件

    在这里插入图片描述

    mybatis-config.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <!--开启二级缓存-->
            <setting name="cacheEnabled" value="true"/>
        </settings>
    </configuration>
    

    DeptDao.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.ddf.springcloud.dao.DeptDao">
    
        <insert id="addDept" parameterType="Dept">
            insert into dept(dname,db_source) values(#{dname},DATABASE());
        </insert>
    
        <select id="findById" resultType="Dept" parameterType="Long">
            select * from dept where deptno = #{deptno}
        </select>
    
        <select id="findAll" resultType="Dept">
            select * from dept;
        </select>
    </mapper>
    

    4.创建dao接口类:DeptDao

    package com.ddf.springcloud.dao;
    
    import com.ddf.springcloud.pojo.Dept;
    import org.apache.ibatis.annotations.Mapper;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Mapper
    @Repository
    public interface DeptDao {
    
        //添加
        public boolean addDept(Dept dept);
        //通过id查询
        public Dept findById(Long id);
        //查询所有
        public List<Dept> findAll();
    }
    

    5.创建service层:DeptService和DeptServiceImpl

    package com.ddf.springcloud.service;
    
    import com.ddf.springcloud.pojo.Dept;
    
    import java.util.List;
    
    public interface DeptService {
        //添加
        public boolean addDept(Dept dept);
    
        //通过id查询
        public Dept findById(Long id);
    
        //查询所有
        public List<Dept> findAll();
    }
    
    package com.ddf.springcloud.service;
    
    import com.ddf.springcloud.dao.DeptDao;
    import com.ddf.springcloud.pojo.Dept;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class DeptServiceImpl implements DeptService {
    
        @Autowired
        private DeptDao deptDao;
    
        public boolean addDept(Dept dept) {
            return deptDao.addDept(dept);
        }
    
        public Dept findById(Long id) {
            return deptDao.findById(id);
        }
    
        public List<Dept> findAll() {
            return deptDao.findAll();
        }
    }
    

    6.创建controller层:DeptController

    package com.ddf.springcloud.controller;
    
    import com.ddf.springcloud.pojo.Dept;
    import com.ddf.springcloud.service.DeptService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    //提供Restful服务
    @RestController
    public class DeptController {
    
        @Autowired
        private DeptService deptService;
    
        @PostMapping("/dept/add")
        public boolean addDept(Dept dept){
            return deptService.addDept(dept);
        }
    
        @GetMapping("/dept/get/{id}")
        public Dept getDept(@PathVariable Long id){
            return deptService.findById(id);
        }
    
        @GetMapping("/dept/list")
        public List<Dept> findAll(){
            return deptService.findAll();
        }
    }
    
    

    7.创建测试类,测试项目是否能够正常运行

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    //设置启动类
    @SpringBootApplication
    public class DeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(DeptProvider_8001.class,args);
        }
    }
    
  5. 在创建一个Maven项目(子项目)消费者

    1.引入相关需要的jar包

    <!--引入实体类+web-->
    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
    

    2.创建application.yml文件配置端口号

    server:
      port: 80
    

    3.创建Controller层:DeptConsumerController

    package com.ddf.springcloud.controller;
    
    import com.ddf.springcloud.pojo.Dept;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class DeptConsumerController {
    
        //理解:消费者,应该有service层
        //RestTemplate   供我们直接调用就可以了,注册到Spring中
    
        @Autowired
        private RestTemplate restTemplate;  //通过restTemplate去获取服务端的对应方法
    
        //定义服务端请求路径
        private static final String REST_URL_PREFIX="http://localhost:8001";
    
        @GetMapping("/comsumer/dept/add")
        public Boolean add(Dept dept){
            //(url,实体:map,class<T> responseType)
            //url:请求路径
            //实体:参数
            //responseType:请求的类型
            return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add",dept,Boolean.class);
        }
    
        @GetMapping("/comsumer/dept/get/{id}")
        public Dept get(@PathVariable Long id){
            return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id,Dept.class);
        }
    
    
        @GetMapping("/comsumer/dept/list")
        public List<Dept> list(){
            return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list",List.class);
        }
    }
    

    4.创建config层:configBean(注入RestTemplate供我们使用)

    package com.ddf.springcloud.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    //@Configuration类似于我们之前用spring的application.xml文件
    @Configuration
    public class configBean {
    
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    

    5.创建测试类,看是否能够访问到8001端口(先启动8001在启动80端口

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    //设置启动类
    @SpringBootApplication
    public class DeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(DeptProvider_8001.class,args);
        }
    }
    

    8001端口访问:http://localhost:8001/dept/get/1

    80端口访问:http://localhost/comsumer/dept/get/1;就可以访问到8001端口的数据

2.配置Eureka

  1. 在创建一个子项目

  2. 引入相关jar包

    <!--导包-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
    
  3. 配置application.yml文件

    server:
      port: 7001
    
    
    #配置Eureka
    eureka:
      instance:
        hostname: localhost   #Eureka服务器的实例名称
      client:
        register-with-eureka: false   #表示是否想eureka注册中心注册自己
        fetch-registry: false   #fetch-registry如果为false,则表示自己为注册中心
        service-url:    #监控页面
          defaultZon: http://${eureka.instance.hostname}:${server.port}/eureka/
    
  4. 创建测试类

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer     //EnableEurekaServer    服务端的启动类,可以接受别人注册进来
    public class EurekaServer_7001 {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServer_7001.class, args);
        }
    }
    

    😋访问:http://localhost:7001/;就能进入到Eureka的页面

    在这里插入图片描述

  5. 注意事项

    在这里需要降一下springboot的版本,要不然会报错:把它降到Springboot2.1.6就好了
    在这里插入图片描述

3.把Eureka配置到8001端口中

  1. 导入相关jar

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EjgErTl-1604756922767)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201021212352457.png)]

  2. 在8001项目中的application.yml配置Eureka

    #eureka的配置
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7001/eureka/
    
  3. 在测试类中开启Eureka

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    //设置启动类
    @SpringBootApplication
    @EnableEurekaClient     //在服务启动后自动注册到Eureka中,开启Eureka的连接
    public class DeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(DeptProvider_8001.class,args);
        }
    }
    

    先启动7001项目然后在启动8001项目,然后访问:http://localhost:7001/我们就可以看到我们注册的8001端口号

    在这里插入图片描述

  4. 完善Eureka的监控信息

    1. 在8001项目引入jar包
    <!--actuator完善监控信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
    1. 在8001项目中的application.yml配置Eureka
    #eureka的配置
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7001/eureka/
      instance:
        instance-id: springcloud-provider-dept8001  #修改eureka上的Status
    
    #配置Status的信息
    info:
      app.name: ddf-springcloud
      company.name: blog.ddf.com
    

    然后访问:http://localhost:7001/;点击Status下的路径,我们就可以看到我们配置的信息
    在这里插入图片描述
    在这里插入图片描述

  5. Eureka自我保护机制

    出现这个就是Eureka自我保护机制,说明某个端口号出现了问题断开了连接,需要重新开启才可以连接

    在这里插入图片描述

  6. 注入DiscoveryClient实现服务注册与发现

    1.在8001项目DeptController注入DiscoveryClient

    package com.ddf.springcloud.controller;
    
    import com.ddf.springcloud.pojo.Dept;
    import com.ddf.springcloud.service.DeptService;
    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.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    //提供Restful服务
    @RestController
    public class DeptController {
    
        @Autowired
        private DeptService deptService;
    
        //获取一些配置的信息,得到具体的微服务
        @Autowired
        private DiscoveryClient client;
    
        @PostMapping("/dept/add")
        public boolean addDept(Dept dept){
            return deptService.addDept(dept);
        }
    
        @GetMapping("/dept/get/{id}")
        public Dept getDept(@PathVariable Long id){
            return deptService.findById(id);
        }
    
        @GetMapping("/dept/list")
        public List<Dept> findAll(){
            return deptService.findAll();
        }
    
        //通过注册进来的微服务,去获取一些消息
        @GetMapping("/dept/discovery")
        public Object discovery(){
            //获取微服务列表的清单
            List<String> services = client.getServices();
            System.out.println("获取到了微服务的信息:" + services);
    
            //得到一个具体的微服务新,通过具体的微服务id,application
            List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
            //打印出相关信息
            for(ServiceInstance instance : instances){
                System.out.println(instance.getHost());
                System.out.println(instance.getPort());
                System.out.println(instance.getUri());
                System.out.println(instance.getServiceId());
            }
    
            return this.client;
        }
    }
    
    1. 在启动类中添加@EnableDiscoveryClient注解
    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    //设置启动类
    @SpringBootApplication
    @EnableEurekaClient     //在服务启动后自动注册到Eureka中,开启Eureka的连接
    @EnableDiscoveryClient  //服务发现
    public class DeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(DeptProvider_8001.class,args);
        }
    }
    
    1. 运行8001项目:访问http://localhost:8001/dept/discovery,就会得到这个信息
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值