一步一步創建SpringCloud項目(二)—— 使用feign和ribbon調用微服務


一、創建服務提供者service-hi

1、創建子項目的方法類似eureka,略

 

2、修改pom文件,主要是添加jar包

<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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.landcode</groupId>
        <artifactId>land</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <artifactId>land-service-hi</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.landcode</groupId>
            <artifactId>land-common</artifactId>
            <version>1.0.0-SNAPSHOT</version>        
        </dependency>
        
     <!-- 引入eureka jar包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <build> <finalName>land-service-hi</finalName> // jar包名 <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <!-- 打包成可執行jar包 --> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>

 

3、resource目錄下添加配置文件application.yml

server:
  port: 8855
  
spring:
  application:
    name: service-hi

eureka:
  instance:
    prefer-ip-address: true   #開啟顯示IP地址
    instance-id: ${spring.cloud.client.ip-address}:${server.port}   #eureka頁面顯示IP地址:端口號
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

4、新建啟動類,注意加上@EnableEurekaClient 注解,到eureka 注冊服務

@SpringBootApplication
@EnableEurekaClient
public class HiApplication {

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

 

5、新建一個測試controller,方便服務調用方測試。測試功能中會返回服務方的端口號,方便做負載均衡測試

@RestController
public class HiController {
    
    @Value("${server.port}")
    private String port;
    
    @RequestMapping(value = "/hi")
    public String hi() {
        return "hi " + port;  // 返回端口號,方便負載均衡功能測試
    }
}

 

二、創建服務消費方service-consumer

1、新建子項目service-consumer 作為服務調用方,方法類似eureka(略),修改pom文件,添加eureka、openfeign的jar包

<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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.landcode</groupId>
        <artifactId>land</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <artifactId>land-service-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.landcode</groupId>
            <artifactId>land-common</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>land-service-consumer</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <!-- 打包成可執行jar包 -->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <encoding>utf-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

2、resource目錄添加項目配置文件application.yml

server:
  port: 8866
  
spring:
  application:
    name: service-consumer

eureka:
  instance:
    prefer-ip-address: true   #開啟顯示IP地址
    instance-id: ${spring.cloud.client.ip-address}:${server.port}   #eureka頁面顯示IP地址:端口號
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

3、添加項目啟動類,@EnableFeignClients 表示使用feign調用服務接口,Ribbonclient 注解表示采用ribbon做負載均衡,configuration = RibbonConfig.class, RibbonConfig 是Ribbon 負載均衡機制配置類

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = { "com.landcode.service.consumer.service" })
@RibbonClient(name = "service-hi", configuration = RibbonConfig.class )
public class ConsumerApplication {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(ConsumerApplication.class, args);
    }

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

 

4、RibbonConfig配置類,指定使用某種負載均衡策略

@Configuration
public class RibbonConfig {
    @Resource
    IClientConfig clientConfig;

    @Bean
    public IRule ribbonRule(IClientConfig clientConfig) {
//        return new RandomRule(); //隨機選擇策略
        return new WeightedResponseTimeRule();
    }
}

 

5、新建service,調用服務service-hi,會自動采用ribbon的負載均衡策略

@FeignClient(value = "service-hi")
public interface ITestHi {

    @RequestMapping("/hi")
    public String testHi();
}

 

6、新建測試 controller,測試服務調用和負載均衡。這里注意:如果ITestHi還有實現類bean的話,注入時注意通過name區分

@RestController
public class TestHiController {
    
    @Autowired
    private ITestHi testHi;
    
    @RequestMapping("/consumer/hi")
    public String testHi() {
        return testHi.testHi();
    }
}

 

三、測試

12、啟動eureka,啟動幾個service-hi服務(只需修改為不同端口號),啟動service-consumer服務,打開瀏覽器輸入http://192.168.0.3:8866/consumer/hi 調用服務消費測試接口,可以看見每次調用打印了服務提供方不同的端口號。

頁面分別打印:hi 8855、hi 8856、hi 8856、hi 8857、hi 8856、hi 8855、hi 8857

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM