搜索
您的当前位置:首页正文

FeignClient调用指定的动态URL

来源:好走旅游网

FeignClient调用指定的动态URL

1 创建demo1服务

  • pom.xml

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.5.3</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.demo</groupId>
    	<artifactId>demo1</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>demo1</name>
    	<description>Demo project for Spring Boot</description>
    	<properties>
    		<java.version>1.8</java.version>
    		<spring-cloud.version>2020.0.3</spring-cloud.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-openfeign</artifactId>
    		</dependency>
    
    		<!-- eureka -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<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>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    
  • application-dev1.yml

    server:
      port: 8111
    spring:
      application:
        name: ${APPLICATION_NAME:demo1}
    eureka:
      client:
        fetch-registry: true
        register-with-eureka: true
        service-url:
           defaultZone: http://localhost:18880/eureka
      instance:
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        prefer-ip-address: true
    
  • application-dev2.yml

    server:
      port: 8112
    spring:
      application:
        name: ${APPLICATION_NAME:demo1}
    eureka:
      client:
        fetch-registry: true
        register-with-eureka: true
        service-url:
          defaultZone: http://localhost:18880/eureka
      instance:
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        prefer-ip-address: true
    
  • IndexController.java

    package com.demo.demo1.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @description:
     * @author: Evan
     * @time: 2021/8/2 17:17
     */
    @RestController
    public class IndexController {
    
        @Value("${server.port}")
        private String port;
    
        @GetMapping("/hello")
        public String hello(){
            System.out.println("进入" + port + "服务器");
            return "返回的端口为:" + port;
        }
    }
    
  • 以不同的端口,来启动demo1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VkUC9kBR-1627905017557)(F:\黑格\pics\image-20210802194514303.png)]

2 创建demo2服务

  • pom.xml

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.5.3</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.demo</groupId>
    	<artifactId>demo2</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>demo2</name>
    	<description>Demo project for Spring Boot</description>
    	<properties>
    		<java.version>1.8</java.version>
    		<spring-cloud.version>2020.0.3</spring-cloud.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-openfeign</artifactId>
    		</dependency>
    
    		<!-- eureka -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<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>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    
  • application.yml

    server:
      port: 8113
    spring:
      application:
        name: ${APPLICATION_NAME:demo2}
    eureka:
      client:
        fetch-registry: true
        register-with-eureka: true
        service-url:
           defaultZone: http://localhost:18880/eureka
      instance:
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        prefer-ip-address: true
    
  • DemoFeign.java

    package com.demo.demo2.Feign;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import java.net.URI;
    
    /**
     * @description:
     * @author: Evan
     * @time: 2021/8/2 17:34
     */
    //@FeignClient(name = "DEMO1", url="EMPTY")
    @FeignClient(name = "DEMO1", url="http://localhost:8111")
    public interface DemoFeign {
    
        /**
         * 调用demo1的接口
         * @return
         */
        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        String hello();
    
        /**
         * 调用demo1的接口
         * @return
         */
        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        String hello1(URI uri);
    }
    
  • IndexController.java

    package com.demo.demo2.controller;
    
    import com.demo.demo2.Feign.DemoFeign;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.net.URI;
    
    /**
     * @description:
     * @author: Evan
     * @time: 2021/8/2 17:33
     */
    @RestController
    public class IndexController {
    
        @Autowired
        private DemoFeign demoFeign;
    
        @GetMapping("/testFeign")
        public String testFeign(){
            System.out.println("在demo2服务中,调用demo1的服务");
            String resultStr = demoFeign.hello();
            System.out.println("在demo2服务中,调用demo1的服务,返回的结果:" + resultStr);
            return "在demo2服务中,调用demo1的服务,返回的结果:" + resultStr;
        }
    
        @GetMapping("/testFeign2")
        public String testFeign2(@RequestParam String server) throws Exception{
            String url = "";
            if("1".equals(server)){
                url = "http://localhost:8111";
            }else if("2".equals(server)){
                url = "http://localhost:8112";
            }
            System.out.println("在demo2服务中,调用demo1的服务" + url);
            String resultStr = demoFeign.hello1(new URI(url));
            System.out.println("在demo2服务中,调用demo1的服务,返回的结果:" + resultStr);
            return "在demo2服务中,调用demo1的服务,返回的结果:" + resultStr;
        }
    }
    

测试

  • 指定服务器ip

    • http://localhost:8113/testFeign2?server=1
      • 返回【在demo2服务中,调用demo1的服务,返回的结果:返回的端口为:8111】
    • http://localhost:8113/testFeign2?server=2
      • 返回【在demo2服务中,调用demo1的服务,返回的结果:返回的端口为:8112】
    • http://localhost:8113/testFeign
      • 返回【在demo2服务中,调用demo1的服务,返回的结果:返回的端口为:8111】

因篇幅问题不能全部显示,请点此查看更多更全内容

Top