SpingCloud整合Consul实现服务注册并访问

目录

SpingCloud整合Consul实现服务注册

前言

一.环境准备

二.编写服务提供者模块

三.测试服务提供者模块是否搭建成功

四.编写服务消费者模块

五.测试服务消费者模块是否搭建成功


SpingCloud整合Consul实现服务注册

前言

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

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

 

一.环境准备

1.Windows环境下的Consul

如果还未配置consul环境的同学可以移步我的另外一篇文章喔,那里对如何在Windows环境下安装consul有着很详细的介绍~ 

Window环境下Consul的介绍与安装教程(超详细!!)https://blog.csdn.net/weixin_47025166/article/details/125502753?spm=1001.2014.3001.5502

 

2.一个简单的springcloud父项目环境 

 

cloud2022项目中的pom.xml导入springcloud依赖和一些常规依赖




    4.0.0

    com.canrioyuan
    cloud2022
    1.0-SNAPSHOT
    pom
    

    
        cloud-provider-payment8001
        cloud-consumer-order80
        cloud-api-commons
        cloud-eureka-server7001
        cloud-eureka-server7002
        cloud-provider-payment8002
        cloud-provider-payment8004
    

    
    
        UTF-8
        1.8
        1.8
        4.12
        1.2.17
        1.18.24
        8.0.21
        1.1.21
        3.5.1
    

    
    
        
        
            
            
                org.springframework.boot
                spring-boot-dependencies
                2.2.2.RELEASE
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Hoxton.SR1
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import
            
            
                mysql
                mysql-connector-java
                ${mysql.version}
            
            
                com.alibaba
                druid-spring-boot-starter
                ${druid.version}
            
            
                com.baomidou
                mybatis-plus-boot-starter
                ${mybatis-plus.spring.boot.version}
            
            
                junit
                junit
                ${junit.version}
            
            
                log4j
                log4j
                ${log4j.version}
            
            
                org.projectlombok
                lombok
                ${lombok.version}
                true
            

        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    true
                    true
                
            
        
    








二.编写服务提供者模块

1.在cloud2022下创建一个cloud-providerconsul-payment8006作为服务提供者

 2.在pom.xml文件中添加常规依赖和consul和一些常规依赖

        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

 

3.编写application.yaml

#consul服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment  #服务名字
  #consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}
 
 

 

4.编写主启动类PaymentMain8006

package com.canrioyuan;

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

@SpringBootApplication
@EnableDiscoveryClient  //该注解用于使用consul和zookeeper时作为注册中心提供服务
public class PaymentMain8006 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8006.class,args);
    }
}

 

5.编写PaymentController

package com.canrioyuan.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@RestController
@Slf4j
public class PaymentController {

    @Value("${sever.port}")
    private String serverPort;

    @GetMapping(value="/payment/consul")
    public String paymentConsul(){
        return "springcloud with consul"+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}

三.测试服务提供者模块是否搭建成功

1.运行consul

在命令行端口输入consul agent -dev,启动consul

consul agent -dev

启动成功后如下图所示 

SpingCloud整合Consul实现服务注册并访问_第1张图片

2.运行PaymentMain8006

运行成功后如下图所示: 

SpingCloud整合Consul实现服务注册并访问_第2张图片

3.访问  http://localhost:8006/payment/consul

访问成功后如下图所示

SpingCloud整合Consul实现服务注册并访问_第3张图片

4.访问  http://localhost:8500

可以看到consul的web端中已经对服务提供者的服务进行注册

SpingCloud整合Consul实现服务注册并访问_第4张图片

四.编写服务消费者模块

1.在cloud2022下创建一个cloud-consumerconsul-order80作为服务消费者      

2.在pom.xml文件中添加常规依赖和consul和一些常规依赖

  
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

 

 3.编写application.yaml

###consul服务端口号
server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

 

4.编写主启动类OrderConsulMain80

package com.canrioyuan;

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

@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderConsulMain80.class, args);
    }
}
 
 





 

5.编写配置类ApplicationContextConfig(用于注册RestTemplate

package com.canrioyuan.controller;

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 {
    /**
     * RestTemplate是Spring提供的用于访问Rest服务的客户端,
     * 它提供了很多可以方便访问远程http服务的方法,这些方法可以帮助开发人员减少编写客户端代码的工作量。
     * @return
     */
    @Bean  //将RestTemplate注册到容器中
    /**
     * @LoadBalanced注解,我们在使用这个注解后,就能在调用其他微服务的时候,通过服务实例名称就能进行调用其他的微服务,
     * 而不是直接把要调用的微服务的ip和端口号写死在代码当中。
     */
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

 

6.编写OrderConsulController

package com.canrioyuan.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderConsulController
{
    public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/consul")
    public String paymentInfo()
    {
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
        System.out.println("消费者调用支付服务(consule)--->result:" + result);
        return result;
    }
}
 
 
 

五.测试服务消费者模块是否搭建成功

1.启动该服务消费者模块

SpingCloud整合Consul实现服务注册并访问_第5张图片

2.访问 http://localhost/consumer/payment/consul

访问成功后如下图所示

SpingCloud整合Consul实现服务注册并访问_第6张图片

 3.访问 http://localhost:8500

可以看到我们的消费者模块和服务提供者模块都已经被注册进Services

SpingCloud整合Consul实现服务注册并访问_第7张图片

至此,我们SpingCloud整合Consul实现服务注册的教程就结束啦~

感谢您的阅读,希望我的文章能给你带来帮助!!!

你可能感兴趣的