马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本文先容Spring Boot集成Spring Cloud 2024,且不利用Feign,而是采用Spring 6自带的@HttpExchange方式举行服务调用的详细步骤:
环境准备
- Spring Boot版本:推荐利用Spring Boot 3.4.1及以上版本,以更好地与Spring Cloud 2024适配。
- Java版本:建议利用Java 21,以得到更好的性能和特性支持。
集成步骤
1. 创建项目并添加依赖
通过Spring Initializr(https://start.spring.io/)创建Spring Boot项目,在pom.xml文件中添加以下依赖:
- <properties>
- <java.version>21</java.version>
- <springcloud.version>2024.0.0</springcloud.version>
- <springboot.version>3.4.1</springboot.version>
- </properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${springcloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <dependencies>
- <!-- Spring Boot Web 依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <!-- Spring Boot WebFlux 依赖,用于 @HttpExchange -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-webflux</artifactId>
- </dependency>
- <!-- Spring Cloud 服务发现依赖(以 Eureka 为例) -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- </dependencies>
复制代码 2. 设置服务注册中央(以Eureka为例)
2.1 添加Eureka Server依赖
在服务注册中央项目的pom.xml中添加以下依赖:
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
复制代码 2.2 设置Eureka Server
在application.yml文件中添加如下设置:
- server:
- port: 8761 # Eureka服务器端口
- spring:
- application:
- name: eureka-server # 服务名称
- eureka:
- client:
- register-with-eureka: false # 不将自己注册到Eureka
- fetch-registry: false # 不从Eureka获取服务列表
复制代码 2.3 启用Eureka Server
在Spring Boot主应用类上添加@EnableEurekaServer注解:
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
- @SpringBootApplication
- @EnableEurekaServer
- public class EurekaServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(EurekaServerApplication.class, args);
- }
- }
复制代码 3. 设置服务提供者
3.1 添加Eureka客户端依赖
确保服务提供者项目的pom.xml中包含spring-cloud-starter-netflix-eureka-client依赖。
3.2 设置Eureka客户端
在application.yml中设置如下内容:
- spring:
- application:
- name: my-service-provider # 服务名称
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:8761/eureka/ # Eureka服务器地址
- register-with-eureka: true # 注册到Eureka服务器
- fetch-registry: true # 从Eureka服务器获取服务列表
复制代码 3.3 创建服务接口和实现类
编写业务接口和实现类,提供具体的服务功能。比方:
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController
- public class HelloController {
- @GetMapping("/hello")
- public String hello() {
- return "Hello from service provider!";
- }
- }
复制代码 3.4 启用Eureka客户端
在Spring Boot主应用类上添加@EnableEurekaClient注解:
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.client.EnableEurekaClient;
- @SpringBootApplication
- @EnableEurekaClient
- public class ServiceProviderApplication {
- public static void main(String[] args) {
- SpringApplication.run(ServiceProviderApplication.class, args);
- }
- }
复制代码 4. 设置服务消费者
4.1 添加依赖
服务消费者项目的pom.xml中同样需要spring-cloud-starter-netflix-eureka-client以及spring-boot-starter-webflux依赖。
4.2 设置Eureka客户端
与服务提供者类似,在application.yml中设置Eureka客户端信息,指定Eureka服务器地点等:
- spring:
- application:
- name: my-service-consumer # 服务名称
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:8761/eureka/ # Eureka服务器地址
- register-with-eureka: true # 注册到Eureka服务器
- fetch-registry: true # 从Eureka服务器获取服务列表
复制代码 4.3 利用@HttpExchange举行服务调用
首先,创建一个设置类来设置WebClient和HttpServiceProxyFactory:
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.reactive.function.client.WebClient;
- import org.springframework.web.service.invoker.HttpServiceProxyFactory;
- @Configuration
- public class ClientConfig {
- @Bean
- public WebClient webClient() {
- return WebClient.builder()
- .build();
- }
- @Bean
- public HttpServiceProxyFactory httpServiceProxyFactory(WebClient webClient) {
- return HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
- }
- }
复制代码 然后,定义一个利用@HttpExchange的接口来调用服务提供者的接口:
- import org.springframework.web.service.annotation.GetExchange;
- import org.springframework.web.service.annotation.HttpExchange;
- @HttpExchange
- public interface HelloServiceClient {
- @GetExchange("http://my-service-provider/hello")
- String getHelloMessage();
- }
复制代码 最后,在服务消费者的控制器中利用该接口举行调用:
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController
- public class ConsumerController {
- @Autowired
- private HelloServiceClient helloServiceClient;
- @GetMapping("/call-provider")
- public String callProvider() {
- return helloServiceClient.getHelloMessage();
- }
- }
复制代码 常见问题及办理办法
版本兼容性问题
- 缘故原由:Spring Boot、Spring Cloud以及其他相关依赖版本不匹配。
- 办理办法:参考官方文档或社区推荐的版本组合,确保各组件版本兼容。
服务注册与发现问题
- 缘故原由:网络问题、设置错误等导致服务无法注册到Eureka或无法发现其他服务。
- 办理办法:检查网络连接,确保Eureka服务器可访问;仔细核对服务设置中的Eureka服务器地点、服务名称等信息是否精确。
@HttpExchange调用失败
- 缘故原由:服务名称解析错误、接口路径不匹配、网络故障等。
- 办理办法:检查@GetExchange注解中的服务地点和接口路径是否精确;排查网络问题,确保服务消费者与提供者之间网络畅通。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |