服务注册与发现【Consul】

 

Consul官网:https://www.consul.io/

Consul简介:

Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司 用 Go 语言开发

它提供了微服务系统中的 服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul 提供了一种完整的服务网格解决方案。

它具有很多优点。包括:基于raft 协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议,支持跨数据中心的WAN集群,提供图形界面,跨平台,支持Linux、Mac、Windows。

服务注册与发现【Consul】_第1张图片

 

下载地址:https://www.consul.io/downloads    

中文文档地址:https://www.springcloud.cc/spring-cloud-consul.html

下载完成后只有一个 consul.exe文件,可以在当前路径下用cmd控制台查看版本信息、启动

服务注册与发现【Consul】_第2张图片

 

以开发模式启动:consul agent -dev

访问:http://localhost:8500

服务注册与发现【Consul】_第3张图片

 

 

Consul的使用:

核心步骤:

1. POM引入依赖。

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>

2. YML配置。

spring:
  application:
    name: cloud-payment-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

 

3. 启动类添加注解。

@EnableDiscoveryClient

 

示例:

新建支付服务: cloud-providerconsul-payment8006

POM:

xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>yct-cloud-parentartifactId>
        <groupId>com.yct.springcloudgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>cloud-providerconsul-payment8006artifactId>


    <dependencies>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>
        <dependency>
            <groupId>com.yct.springcloudgroupId>
            <artifactId>cloud-base-mybatisplusartifactId>
            <version>${project.version}version>
        dependency>
        <dependency>
            <groupId>com.yct.springcloudgroupId>
            <artifactId>cloud-base-apiartifactId>
            <version>${project.version}version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-typehandlers-jsr310artifactId>
            <version>1.0.2version>
        dependency>

        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
        dependency>



        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-generatorartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.velocitygroupId>
            <artifactId>velocity-engine-coreartifactId>
            <version>2.2version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>


    dependencies>
project>
POM

YML:

server:
  port: 8006


spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/cloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}


mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.yct.springcloud.entity.*
YML

主启动类:

package com.yct.springcloud;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@MapperScan("com.yct.springcloud.mapper")
@EnableDiscoveryClient
public class ProviderPaymentApplication8006 {

    public static void main(String[] args) {
        SpringApplication.run(ProviderPaymentApplication8006.class,args);
    }
}
主启动类

从其他支付微服务(例如:cloud-provider-payment8002 项目)项目复制其他所有代码,修改controller中的访问路径(加个/consul 表示是Consul的服务),其他都不用改。

测试:

服务注册与发现【Consul】_第4张图片

 

 

 

新建消费者 订单服务:cloud-consumerconsul-order8081

POM:

xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>yct-cloud-parentartifactId>
        <groupId>com.yct.springcloudgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>cloud-consumerconsul-order8081artifactId>



    <dependencies>

        <dependency>
            <groupId>com.yct.springcloudgroupId>
            <artifactId>cloud-base-apiartifactId>
            <version>1.0-SNAPSHOTversion>
            <scope>compilescope>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>


        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>


project>
POM

YML:

server:
  port: 8081
spring:
  application:
    name: consul-order-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
YML

配置Bean:

package com.yct.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}
ApplicationContextConfig.java

Controller:

package com.yct.springcloud.controller;

import com.yct.springcloud.entity.pay.Payment;
import com.yct.springcloud.support.CommonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.awt.*;

/**
 * 订单Controller
 */
@RestController
@Slf4j
public class OrderController {

    public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";

    @Resource
    private RestTemplate restTemplate;

    @PostMapping("/consumer/payment/consul/create")
    public CommonResult create(Payment payment) {


        log.info("Consumer:插入支付【" + payment + "】");

        return restTemplate.postForObject(PAYMENT_URL + "/yct/payment/consul/insertPayment", payment, CommonResult.class);  //写操作
    }

    @GetMapping(value = "/consumer/payment/consul/get/{id}"/*,produces = { "application/json;charset=UTF-8" }*/)
    public CommonResult getPayment(@PathVariable("id") Long id) {

        log.info("Consumer:根据id【" + id + "】查询支付数据。");

        return restTemplate.getForObject(PAYMENT_URL + "/yct/payment/consul/get/" + id, CommonResult.class);
    }
}
OrderController.java

主启动类:

package com.yct.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class CustomerOrderApplication8081 {
    public static void main(String[] args) {
        SpringApplication.run(CustomerOrderApplication8081.class,args);
    }

}
CustomerOrderApplication8081.java

 

 

两个订单服务的结构也是一样的,只是当前订单服务注册进了Consul。之前的注册进了Eureka。

服务注册与发现【Consul】_第5张图片

 

 

测试:

服务注册与发现【Consul】_第6张图片

 

你可能感兴趣的:(服务注册与发现【Consul】)