温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Resttemplate和Ribbon调用Eureka实现负载均衡

发布时间:2022-03-28 09:18:56 来源:亿速云 阅读:213 作者:iii 栏目:开发技术

本篇内容介绍了“怎么使用Resttemplate和Ribbon调用Eureka实现负载均衡”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.服务注册和发现Eureka

可以用作服务治理。

2.首先我们建立一个父子工程

最外层是forezp

其下面建立四个子工程

  • eureka-server

  • eureka-client

  • eureka-client1

  • eureka-ribbon-client

3.forezp工程相关

1.forezp pom文件如下

<?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 http://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.1.5.RELEASE</version>       <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>forezp</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>forezp</name>    <description>Demo project for Spring Boot</description>       <properties>       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>       <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>       <java.version>1.8</java.version>       <spring-cloud.version>Dalston.SR1</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>       <modules>       <module>euraka-client</module>       <module>euraka-server</module>       <module>eureka-ribbon-client</module>       <module>euraka-client2</module>    </modules>       <!--<build>-->       <!--<plugins>-->          <!--<plugin>-->             <!--<groupId>org.springframework.boot</groupId>-->             <!--<artifactId>spring-boot-maven-plugin</artifactId>-->          <!--</plugin>-->       <!--</plugins>-->    <!--</build>-->    </project>

4.Eureka的服务中心:eureka-server相关

1.pom文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>       <groupId>com.example</groupId>       <artifactId>forezp</artifactId>       <version>0.0.1-SNAPSHOT</version>       <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>euraka-server</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>euraka-server</name>    <description>Demo project for Spring Boot</description>       <properties>       <java.version>1.8</java.version>       <spring-cloud.version>Greenwich.SR1</spring-cloud.version>    </properties>       <dependencies>       <dependency>          <groupId>org.springframework.cloud</groupId>          <artifactId>spring-cloud-starter-netflix-eureka-server</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>

2.application.properties文件

server.port=8761  eureka.instance.hostname=localhost   #防止自己注册自己 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false #eureka的注册地址 eureka.client.service-url.default-zone=http://${eureka.instance.hostname}:${server.port}/eureka/}

3.需要在启动类添加 @EnableEurekaServer 注解来开启注册服务

package com.example.eurakaserver;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;    @SpringBootApplication @EnableEurekaServer public class EurakaServerApplication {      public static void main(String[] args) {       SpringApplication.run(EurakaServerApplication.class, args);    }   }

5.eureka-client和eureka-client1用来提供服务

这两个子工程其实区别不大,只是为了验证实现负载均衡。

1.pom文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>com.example</groupId>         <artifactId>forezp</artifactId>         <version>0.0.1-SNAPSHOT</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>com.example</groupId>     <artifactId>euraka-client2</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>euraka-client2</name>     <description>Demo project for Spring Boot</description>       <properties>         <java.version>1.8</java.version>         <spring-cloud.version>Greenwich.SR1</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-netflix-eureka-client</artifactId>         </dependency>           <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <optional>true</optional>         </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>

2.新建一个ApiController类

package com.example.eurakaclient2;   import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;    @RestController public class ApiController {        @Value("${server.port}")     String port;     @GetMapping("/hi")     public String home(@RequestParam String name1){         return "hi "+name1+"i am a port:"+port;     } }

3.eureka-client 的 apllication.properties配置如下

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ server.port=8762 spring.application.name=eureka-client

4.eureka-client2的 apllication.properties配置如下

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ server.port=8763 spring.application.name=eureka-client

5.需要在启动类添加注解 @EnableEurekaClient,开启服务提供

package com.example.eurakaclient2;   import org.springframework.boot.SpringApplication;       import org.springframework.boot.autoconfigure.SpringBootApplication;       import org.springframework.cloud.netflix.eureka.EnableEurekaClient;    @SpringBootApplication @EnableEurekaClient public class EurakaClient2Application {      public static void main(String[] args) {       SpringApplication.run(EurakaClient2Application.class, args);    }  }

6.eureka-ribbon-client工程相关

1.pom文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>       <groupId>com.example</groupId>       <artifactId>forezp</artifactId>       <version>0.0.1-SNAPSHOT</version>       <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>eureka-ribbon-client</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>eureka-ribbon-client</name>    <description>Demo project for Spring Boot</description>       <properties>       <java.version>1.8</java.version>       <spring-cloud.version>Greenwich.SR1</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-netflix-ribbon</artifactId>       </dependency>          <dependency>          <groupId>org.springframework.cloud</groupId>          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>       </dependency>          <dependency>          <groupId>org.projectlombok</groupId>          <artifactId>lombok</artifactId>          <optional>true</optional>       </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>

2.applicaiton.properties配置文件如下

spring.application.name=eureka-ribbon-client server.port=8764 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

3.新建RibbonConfig类,在这里注入RestTemplate类同时开启负载均衡

package com.example.eurekaribbonclient;   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 RibbonConfig {        @Bean     @LoadBalanced     RestTemplate restTemplate(){         return new RestTemplate();     } }

4.新建service层,调用eureka-client (eureka-client1)提供的restful接口,其中 eureka-client 为  eureka-client (eureka-client1)注册在 eureka-service上的serviceId信息,如果没有配置serviceId,默认使用spring.application.name

package com.example.eurekaribbonclient;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate;         @Service     public class RibbonService {         @Autowired     RestTemplate restTemplate;     public String hi(String name){           return restTemplate.getForObject("http://eureka-client/hi?name1="+name,String.class);     } }

5.新建controller层,调用RibbonService为我们提供的方法

package com.example.eurekaribbonclient;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;    @RestController public class RibbonController {     @Autowired     RibbonService ribbonService;        @GetMapping("/hi")     public String hi(@RequestParam(required = false,defaultValue = "forezp")String name){         return ribbonService.hi(name);     } }

6.同时也需要在启动类添加@EnableEurekaClient注解

package com.example.eurekaribbonclient;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;    @SpringBootApplication @EnableEurekaClient public class EurekaRibbonClientApplication {       public static void main(String[] args) {       SpringApplication.run(EurekaRibbonClientApplication.class, args);    }   }

7.验证

1.按照顺序启动工程

2.浏览器访问  http://localhost:8761/

可以看到EUREKA-CLIENT 和 EUREKA-RIBBON-CLIENT已经注册进来了 

怎么使用Resttemplate和Ribbon调用Eureka实现负载均衡

3.我们访问 http://localhost:8764/hi?name=forezp 两次

可以看到  页面分别返回

hi forezpi am a port:8762

hi forezpi am a port:8763

这样验证了我们实现了负载均衡。

“怎么使用Resttemplate和Ribbon调用Eureka实现负载均衡”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI