consul注册中心

consul注册中心准备

下载方式:链接:https://pan.baidu.com/s/1JpoJq1zvV0TUBlh3_5pKLw  提取码:neg1 

1、下载consul.exe软件,在cmd运行

 2、查看版本

3、运行consul注册中心consul agent -dev,启动代理程序

4、测试一下成功没,http://localhost:8500,由于刚才我注册过,所以有两个xx的服务,如果出现这个页面表示consul能用

 

 consul客户端服务

模拟两个服务在注册中心进行注册后,相互通信查询数据

product数据源服务

1、创建product9997服务模块

 2、老规矩,配置pom,添加版本号配置+consul+健康检查配置

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

        <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--这个包是用来健康监控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

3、配置文件properties

#开放的端口号
server.port=9997
#注册客户端服务的名字
spring.application.name=product9997
spring.cloud.consul.host=localhost
#注册consul服务的主机   这个是哪个consul.exe 的服务端口号  我们下载了哪个exe 运行以后就有了consul服务注册中心
#不像eureka那样 在一个电脑上要做一个eurekaserver
spring.cloud.consul.port=8500
#注册consul服务的端口号  关闭了consul服务的健康检查 不推荐
#spring.cloud.consul.discovery.register-health-check=false
#指定注册服务名称 默认就是应用名
#spring.cloud.consul.discovery.service-name=${spring.application.name}

4、启动类

package com.example.product9997;

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

@SpringBootApplication
@EnableDiscoveryClient
public class Product9997Application {

    public static void main(String[] args) {
        SpringApplication.run(Product9997Application.class, args);
    }

}

5、controller模仿数据源

package com.example.product9997.controller;

import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.hazelcast.HazelcastHealthContributorAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
//@Slf4j  //日志注解
public class ProductController {

    @Value("${server.port}")
    private int port;

    @RequestMapping("/product/findps")
    public Map<String, Object> findPs() {

        System.out.println("商品调用成功" + port);
        //使用一个map  装数据
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("msg", "服务调用成功:" + port);
        map.put("status", true);  //放一个数据状态
        return map;
    }
}

user访问服务

1、创建user9998服务模块

 2、老规矩pom.xml,这里配置了版本管理+consul配置+健康检查

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

        <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--这个包是用来健康监控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

3、properties配置

#开放的端口号
server.port=9998
#注册客户端服务的名字
spring.application.name=user9998
spring.cloud.consul.host=localhost
#注册consul服务的主机   这个是哪个consul.exe 的服务端口号  我们下载了哪个exe 运行以后就有了consul服务注册中心
#不像eureka那样 在一个电脑上要做一个eurekaserver
spring.cloud.consul.port=8500
#注册consul服务的端口号  关闭了consul服务的健康检查 不推荐
#spring.cloud.consul.discovery.register-health-check=false
#指定注册服务名称 默认就是应用名
#spring.cloud.consul.discovery.service-name=${spring.application.name}

4、applicaton注解,其实这个注解可以加可以不加,consul最新版默认是可以省略的

@SpringBootApplication
@EnableDiscoveryClient
public class User9998Application {

    public static void main(String[] args) {
        SpringApplication.run(User9998Application.class, args);
    }

}

5、controller,从另一个服务拿数据

package com.example.user9998.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController  //包裹的是一个json字符串
public class UserController {
    @GetMapping("/user/findps")
    public String findps(){
        System.out.println("正在调用用户端");
        //http请求工具去访问
        RestTemplate restTemplate = new RestTemplate();
        //访问另一台机器上的端口
        String ps = restTemplate.getForObject("http://localhost:9997/product/findps", String.class);
        return ps;
    }
}

测试

1、在consul中查看两个服务是否注册,http://localhost:8500/

2、这里需要从user模块中的controller去访问,拿到product中的数据

注意 

  服务之间的访问,使用的http协议,restTemplate工具发送请求,从注册中心的注册地址,查找到该服务进行调用。

原文地址:https://www.cnblogs.com/HelloM/p/14316872.html