zoukankan      html  css  js  c++  java
  • springcloud consul

    代码必须有包名,比如test。如果没有,运行会报错。

    一.下载consul的windows版本consul_1.6.2_windows_amd64.zip

    1.解压之后只有一个文件,consul.exe

    2.新建文件run.bat,内容如下:

    consul agent -dev
    pause

    默认启动端口号是8500,访问地址: 

    http://127.0.0.1:8500/ui/dc1/services

    二.建立producer工程spring-cloud-consul-producer

    pom.xml

    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>consul-test</groupId>
    	<artifactId>consul-test</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>consul-test</name>
    	<packaging>jar</packaging>
    	<description>consul-test</description>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.0.RELEASE</version>
    	</parent>
    	<dependencyManagement>
    		<dependencies>
    			<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> 
    				<version>2.0.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> -->
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Finchley.M8</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-actuator</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-actuator</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-config</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-consul</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
    		</dependency>
    	</dependencies>
    </project>
    

    新建文件application.properties

    spring.application.name=spring-cloud-consul-producer
    server.port=8501
    #spring.cloud.consul.host=127.0.0.1
    #spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.serviceName=service-producer
    

    application.yml启动优先级小于bootstrap.yml,会报错:Fetching config from server at : http://localhost:8888

    所以需要:新建bootstrap.yml

    spring:
      cloud:
        config:
          uri: http://localhost:8500
    

    demo代码:

    package test;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
    	@RequestMapping("/hello")
    	public String hello() {
    		return "hello consul";
    	}
    }
    

      

    package test;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class SpringCloudConsulProducerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringCloudConsulProducerApplication.class, args);
    	}
    }
    

    consul健康检查服务请求:http://127.0.0.1:8501/actuator/health

    三.建立consumer工程spring-cloud-consul-consumer

    pom.xml

    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>consul-test</groupId>
        <artifactId>consul-test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>consul-test</name>
        <packaging>jar</packaging>
        <description>consul-test</description>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.0.RELEASE</version>
        </parent>
        <dependencyManagement>
            <dependencies>
                <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> 
                    <version>2.0.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.M8</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-actuator</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            </dependency>
        </dependencies>
    </project>

    application.properties

    spring.application.name=spring-cloud-consul-consumer
    server.port=8503
    #spring.cloud.consul.host=127.0.0.1
    #spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.register=false
    

     

    application.yml启动优先级小于bootstrap.yml,会报错:Fetching config from server at : http://localhost:8888

    所以需要:新建bootstrap.yml

    spring:
      cloud:
        config:
          uri: http://localhost:8500

    demo代码:

    package test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class CallHelloController {
    	@Autowired
    	private LoadBalancerClient loadBalancerClient;
    
    	@RequestMapping("/call")
    	public String call() {
    		ServiceInstance serviceInstance = loadBalancerClient.choose("service-producer");
    		System.out.println("服务地址:" + serviceInstance.getUri());
    		System.out.println("服务名称:" + serviceInstance.getServiceId());
    
    		String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/hello",
    				String.class);
    		System.out.println(callServiceResult);
    		return callServiceResult;
    	}
    }
    

      

    package test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ServiceController {
    	@Autowired
    	private LoadBalancerClient loadBalancerClient;
    	@Autowired
    	private DiscoveryClient discoveryClient;
    
    	/**
    	 * 获取所有服务
    	 */
    	@RequestMapping("/services")
    	public Object services() {
    		return discoveryClient.getInstances("service-producer");
    	}
    
    	/**
    	 * 从所有服务中选择一个服务(轮询)
    	 */
    	@RequestMapping("/discover")
    	public Object discover() {
    		return loadBalancerClient.choose("service-producer").getUri().toString();
    	}
    
    }
    

      

    package test;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringCloudConsulConsumerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringCloudConsulConsumerApplication.class, args);
    	}
    }
    

    四.测试

    启动SpringCloudConsulProducerApplication和SpringCloudConsulConsumerApplication

    http://127.0.0.1:8503/services

    http://127.0.0.1:8503/call

  • 相关阅读:
    redis+Keepalived主从热备切换实例
    启动tomcat时报错:http-nio-8080-exec-10
    HAProxy 的acl应用
    keepalived vip 没有生成或者生成了ping不通?
    CentOS7 PHP+Redis实现Session共享
    CentOS7 安装phpMyAdmin-4.8.3-all-languages
    CentOS7 yum安装配置 drbd-84-utils (外部模式)
    Python-网络编程之进程
    Python-网络编程之socket
    Python-面向对象之反射
  • 原文地址:https://www.cnblogs.com/yaoyu1983/p/12438654.html
Copyright © 2011-2022 走看看