SpringCloud 模块间调用

引入包,springboot与 SpringCloud的包的版本要匹配 我的SpringBoot是2.2.4.RELEASE,SpringCloud是Hoxton.SR1

下面是客户端:

     <dependencies>
  <!-- 客户端导这个-->  
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

启动类上必须有 @EnableEurekaClient,调用别的模块服务的调用类 通过项目名访问必须加@LoadBalanced 这个注解

@PropertySource(value = {"classpath:application.yml", "file:config/application.yml"}, ignoreResourceNotFound = true)
@SpringBootApplication
@EnableSwagger2
@EnableScheduling
@EnableEurekaClient
public class DataApiApplication {

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

    @Bean
    @LoadBalanced  //注解表明这个restRemplate开启负载均衡的功能,通过项目名访问必须加这个注解
    public RestOperations restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

调用的工具类


import com.photon.common.DataEntity.Model.Request.Common.PagingRequest;
import com.photon.common.DataEntity.Model.Request.Common.Request;
import com.photon.common.DataEntity.Model.Response.Common.PagingResponse;
import com.photon.common.DataEntity.Model.Response.Common.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestOperations;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description http远程调用
 * @Author 李修睿
 * @Date 2023/1/5 8:49
 */
@Component
public class HttpRemoteCall {

    @Autowired
    private RestOperations restTemplate;

    /**
     * 访问DBACCESS的连接
     */
    private final String DATAHANDDLER_ADDRESS = "http://DATAHANDLER/";

    /**
     * @Description 普通远程调用
     * @Param [path, accessToken, request]
     * @Return com.photon.common.databean.Response<T>
     * @Author 李修睿
     * @Date 2023/1/5 8:58
     */
    public <T, E> Response<T> call(String path, String accessToken, Request<E> request) {
        HttpHeaders headers = new HttpHeaders();
        headers.set("access_token", accessToken);
        HttpEntity<Request> formEntity = new HttpEntity<>(request, headers);
        ResponseEntity<Response> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, Response.class);
        Response<T> response = forEntity.getBody();

        return response;
    }


    /**
     * @Description 普通远程调用
     * @Param [path, accessToken, request]
     * @Return com.photon.common.databean.Response<T>
     * @Author 李修睿
     * @Date 2023/1/5 8:58
     */
    public <T> Response<T> call(String path, String accessToken) {
        HttpHeaders headers = new HttpHeaders();
        headers.set("access_token", accessToken);
        HttpEntity formEntity = new HttpEntity(headers);
        ResponseEntity<Response> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, Response.class);
        Response<T> response = forEntity.getBody();

        return response;
    }

    /**
     * @Description 普通远程调用
     * @Param [path, accessToken, request]
     * @Return com.photon.common.databean.Response<T>
     * @Author 李修睿
     * @Date 2023/1/5 8:58
     */
    public <T, E> Response<T> call(String path, Request<E> request) {
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<Request> formEntity = new HttpEntity<>(request, headers);
        ResponseEntity<Response> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, Response.class);
        Response<T> response = forEntity.getBody();

        return response;
    }

    /**
     * @Description 普通远程调用
     * @Param [path, accessToken, request]
     * @Return com.photon.common.databean.Response<T>
     * @Author 李修睿
     * @Date 2023/1/5 8:58
     */
    public <T> Response<T> call(String path, String accessToken, Map<Object, Object> queryParams) {
        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("queryParams", queryParams);
        Request request = new Request();
        request.setParams(params);

        HttpHeaders headers = new HttpHeaders();
        headers.set("access_token", accessToken);
        HttpEntity<Request> formEntity = new HttpEntity<Request>(request, headers);
        ResponseEntity<Response> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, Response.class);
        Response<T> response = forEntity.getBody();
        return response;
    }

    /**
     * @Description 分页远程调用
     * @Param [path, accessToken, request]
     * @Return com.photon.common.databean.PagingResponse<T>
     * @Author 李修睿
     * @Date 2023/1/5 8:59
     */
    public <T, E> PagingResponse<T> pagingCall(String path, String accessToken, PagingRequest<E> request) {
        HttpHeaders headers = new HttpHeaders();
        headers.set("access_token", accessToken);
        HttpEntity<PagingRequest> formEntity = new HttpEntity<>(request, headers);
        ResponseEntity<PagingResponse> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, PagingResponse.class);
        PagingResponse<T> response = forEntity.getBody();

        return response;
    }

    /**
     * @Description 分页远程调用
     * @Param [path, accessToken, request]
     * @Return com.photon.common.databean.PagingResponse<T>
     * @Author 李修睿
     * @Date 2023/1/5 8:59
     */
    public <T, E> PagingResponse<T> pagingCall(String path, PagingRequest<E> request) {
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<PagingRequest> formEntity = new HttpEntity<PagingRequest>(request, headers);
        ResponseEntity<PagingResponse> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, PagingResponse.class);
        PagingResponse<T> response = forEntity.getBody();
        return response;
    }


    public <T> PagingResponse<T> pagingCall(String path, String accessToken, Map<Object, Object> queryParams) {
        PagingRequest request = new PagingRequest();
        if (queryParams.containsKey("pageNum")
                && queryParams.containsKey("pageSize")) {
            request.setPageSize(Integer.parseInt(queryParams.get("pageSize").toString()));
            request.setPageNum(Integer.parseInt(queryParams.get("pageNum").toString()));
        }

        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("queryParams", queryParams);
        request.setParams(params);

        HttpHeaders headers = new HttpHeaders();
        headers.set("access_token", accessToken);
        HttpEntity<PagingRequest> formEntity = new HttpEntity<>(request, headers);
        ResponseEntity<PagingResponse> forEntity = restTemplate.postForEntity(DATAHANDDLER_ADDRESS + path, formEntity, PagingResponse.class);
        PagingResponse<T> response = forEntity.getBody();

        return response;
    }
}

配置文件是这个

eureka:
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 10
    lease-expiration-duration-in-seconds: 30
  client:
    service-url:
      defaultZone: http://username:password@localhost:8761/eureka/  #服务中心地址    
    healthcheck:
      enabled: true
info:
  name: ${spring.application.name}
  company: photon

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud中,各个模块之间调用可以通过服务发现和负载均衡来实现。其中,Eureka是一种常用的服务发现工具,它可以让各个模块在启动时向Eureka注册自己的信息,并从Eureka获取其他模块的信息。引用 在上面提供的配置文件中,可以看到客户端依赖了`spring-cloud-starter-netflix-eureka-client`来使用Eureka客户端功能,并配置了Eureka Server的URL(`http://localhost:8761/eureka/`)作为服务中心地址。这样,各个模块就可以通过Eureka发现和调用其他模块的服务。引用 在调用其他模块时,可以使用Feign或RestTemplate进行HTTP请求。Feign是一种声明式的HTTP客户端,可以通过注解的方式定义接口,并自动生成实现类来调用其他模块的服务。而RestTemplate是Spring提供的HTTP客户端库,可以直接发送HTTP请求来调用其他模块的服务。 另外,对于负载均衡的支持,Spring Cloud提供了多种解决方案,例如使用Ribbon进行客户端负载均衡,或者结合Nginx等第三方负载均衡器来实现。 总结起来,Spring Cloud通过服务发现和负载均衡的机制,可以方便地实现各个模块之间调用。使用Eureka作为服务发现工具,结合Feign或RestTemplate进行HTTP请求,可以简化模块之间的通信。同时,结合负载均衡机制,可以提高系统的可用性和性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringCloud 模块调用](https://blog.csdn.net/liwang2016384/article/details/129126887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值