服务的注册与发现(Eureka)

导读:本篇文章讲解 服务的注册与发现(Eureka),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

SpringCloud——服务的注册与发现(Eureka)

一,Rest环境搭建:服务提供者与服务消费者

Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务

1.搭建父工程
父工程打包方式改为pom,在父工程中进行依赖版本管理
在这里插入图片描述

pom.xml

    <modules>
        <module>springcloud-eureka-7001</module>
        <module>springcloud-api</module>
        <module>springcloud-provider-dept-8001</module>
        <module>springcloud-consumer-dept-80</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <junit.version>4.13.2</junit.version>
        <lombok.version>1.18.20</lombok.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>
    <!--打包方式-->
    <packaging>pom</packaging>
    <!--依赖版本管理-->
    <dependencyManagement>
        <dependencies>
            <!--SpringCloud的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.25</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.22</version>
            </dependency>
            <!--Mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>
            <!--日志-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.sprigcloud-api
在这里插入图片描述
所有的实体类实现序列化

package com.yyx.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 {
    private Long deptno;
    private String dname;
    //数据所在数据库,微服务中一个服务对应一个数据库,同一个信息可能存在不同的数据库中
    private String dbSource;

    public Dept(String dname) {
        this.dname = dname;
    }
}

所需依赖

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

3.服务提供者
在这里插入图片描述
在application.yml中配置

server:
  port: 8001
#mybatis的配置
mybatis:
  type-aliases-package: com.yyx.springcloud.pojo
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
#spring的配置
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mydb4?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
#eureka的配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: springcloud-provider-dept8001
#info配置
info:
  app.name: springcloud-study
  company.name: yangyongxin.top

实现三个简单的业务做测试

@Service
public class DeptServiceImpl implements DeptService{
    @Autowired
    private DeptDao deptDao;
    @Override
    public int addDept(Dept dept) {
        return deptDao.addDept(dept);
    }

    @Override
    public Dept queryById(Long id) {
        return deptDao.queryById(id);
    }

    @Override
    public List<Dept> queryAll() {
        return deptDao.queryAll();
    }
}

controller的restful接口对外提供服务

@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;
    @PostMapping("/dept")
    public int addDept(@RequestBody Dept dept){
        return deptService.addDept(dept);
    }
    @GetMapping("/dept/{id}")
    public Dept queryById(@PathVariable("id") Long id){
        return deptService.queryById(id);
    }
    @GetMapping("/dept")
    public List<Dept> queryAll(){
        return deptService.queryAll();
    }
}

测试
在这里插入图片描述
4.服务消费者
在这里插入图片描述
将RestTemplete注入Spring容器中

@Configuration
public class ConfigBean {
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

restTemplate提供多种便捷访问远程http服务的方法,简单的RestFul服务模板

@RestController
public class DeptConsumerController {
    @Autowired
    private RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的RestFul服务模板
    private static final String REST_URL_PREFIX="http://localhost:8001";
    @RequestMapping("/consumer/dept/add")
    public int add(Dept dept){
        return restTemplate.postForObject(REST_URL_PREFIX+"/dept",dept,int.class);
    }
    @RequestMapping("/consumer/dept/get/{deptno}")
    public Dept dept(@PathVariable("deptno") Long deptno){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/"+deptno,Dept.class);
    }
    @RequestMapping("/consumer/dept/list")
    public List<Dept> dept(){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept",List.class);
    }
}

yml中定义端口为80

server:
  port: 80

测试
在这里插入图片描述

二,Eureka中注册服务

在这里插入图片描述
所需依赖

        <!--eureka-->
        <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>
            <version>2.1.4.RELEASE</version>
        </dependency>

yml中配置eureka

server:
  port: 7001

#eureka配置
eureka:
  instance:
    hostname: localhost #eureka服务端的实例名称
  client:
    register-with-eureka: false #表示是否向eureka注册中心注册自己
    fetch-registry: false #fetch-registry为false,则表示自己为注册中心
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

将服务提供者注册进eureka
在服务提供者工程模块中加入eureka依赖

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

在服务提供者工程模块中application.yml添加eureka配置

#eureka的配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: springcloud-provider-dept8001

启动所有项目,访问eureka地址http://localhost:7001/
在这里插入图片描述
配置info
导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

服务提供者模块中配置

#info配置
info:
  app.name: springcloud-study
  company.name: yangyongxin.top

点击后显示该服务信息
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/4987.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!