Ruoyi-Cloud的定时器如何在新建模块中调用?

1.准备openFeign的依赖:

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

2.把依赖放进两个子模块,一个是ruoyi-cloud自带的job模块,一个是你需要调用定时器的新建模块:

3.新建模块自定义一个接口:

4.找到Ruoyi-cloud的system模块,创建一个feign接口:

/**

@FeignClient 注解可以用于客户端的 API 接口定义,它可以将一个 HTTP API 接口转化为一个 Java 接口,从而使得我们可以像调用本地方法一样调用远程服务

**/

@FeignClient(contextId = "cleanShareFeign", value = "ruoyi-share", fallbackFactory = RemoteUserFallbackFactory.class)

注:contextI

RuoYi-Cloud-Plus 框架中,模块调用 Service 方法是微服务架构中常见的需求,通常涉及跨服务的通信。RuoYi-Cloud-Plus 基于 Spring Cloud Alibaba 技术栈,支持多种服务调用方式,主要包括以下几种实现方式: ### 1. 使用 Feign 进行服务调用 Feign 是一个声明式的 Web Service 客户端,能够简化服务间的调用。在 RuoYi-Cloud-Plus 中,可以通过定义 Feign Client 接口来实现模块间的 Service 方法调用。 **实现步骤:** -调用模块中创建 Feign Client 接口,并指定目标服务的名称和需要调用的方法。 - 确保目标服务已经注册到 Nacos 服务注册中心。 - 在 Feign Client 中使用 `@RequestLine` 或 `@GetMapping`、`@PostMapping` 等注解定义请求方式和路径。 ```java @FeignClient(name = "service-provider") public interface ServiceBClient { @GetMapping("/api/serviceB") String callServiceB(); } ``` -调用方的 Service 中注入该 Feign Client 并调用方法。 ```java @Service public class ServiceAClass { @Autowired private ServiceBClient serviceBClient; public String invokeServiceB() { return serviceBClient.callServiceB(); // 调用 Service B 的方法 } } ``` Feign 的调用方式能够简化代码,提高开发效率,并且支持负载均衡和服务发现[^4]。 --- ### 2. 使用 Dubbo 进行 RPC 调用 RuoYi-Cloud-Plus 也支持 Dubbo 协议进行模块间的 RPC 调用。Dubbo 是一种高性能的远程过程调用框架,适用于对性能有较高要求的场景。 **实现步骤:** - 定义服务接口,并在提供方模块中实现该接口。 - 在提供方模块中使用 `@Service` 注解将服务注册到 Nacos。 -调用模块中使用 `@Reference` 注解注入远程服务- 调用远程服务的方法。 ```java // 服务接口 public interface ServiceB { String callServiceB(); } // 提供方服务实现 @Service public class ServiceBImpl implements ServiceB { @Override public String callServiceB() { return "Service B called"; } } // 调用服务 @Service public class ServiceAClass { @Reference private ServiceB serviceB; public String invokeServiceB() { return serviceB.callServiceB(); // 调用 Service B 的方法 } } ``` Dubbo 提供了更细粒度的服务治理能力,例如负载均衡、容错处理等,适合复杂的微服务架构[^3]。 --- ### 3. 使用 RestTemplate 进行 HTTP 调用 如果不需要使用 Feign 或 Dubbo,也可以直接使用 `RestTemplate` 进行 HTTP 调用。这种方式较为原始,但灵活性较高。 **实现步骤:** -调用模块中注入 `RestTemplate`。 - 使用 `RestTemplate` 发送 HTTP 请求调用目标服务的 API。 ```java @Service public class ServiceAClass { @Autowired private RestTemplate restTemplate; public String invokeServiceB() { String url = "http://service-provider/api/serviceB"; return restTemplate.getForObject(url, String.class); // 调用 Service B 的方法 } } ``` 虽然 `RestTemplate` 的使用较为简单,但需要手动处理服务发现和负载均衡,通常不推荐在复杂的微服务架构中使用[^4]。 --- ### 4. 使用 Sentinel 进行熔断与限流 在进行模块调用时,为了提高系统的稳定性,通常会结合 Sentinel 进行熔断和限流处理。在 Feign 或 Dubbo 调用中,可以配置 Sentinel 规则,防止因某个服务的不可用而导致整个系统的雪崩效应。 **配置示例:** - 在 `application.yml` 中启用 Sentinel。 ```yaml feign: sentinel: enabled: true ``` - 在 Sentinel 控制台中配置流控规则和熔断规则,确保在高并发或异常情况下服务的可用性[^3]。 --- ### 5. 使用 Seata 进行分布式事务 如果模块间的调用涉及多个数据库操作,可以使用 Seata 来保证分布式事务的一致性。RuoYi-Cloud-Plus 支持 Seata 的 AT 模式、TCC 模式和 Saga 模式。 **实现步骤:** - 在全局事务的入口方法上添加 `@GlobalTransactional` 注解。 - 在被调用服务中使用 `@TwoPhaseBusinessAction` 注解定义事务的提交和回滚逻辑。 ```java @Service public class ServiceAClass { @Autowired private ServiceB serviceB; @GlobalTransactional public void distributedTransaction() { // 本地事务操作 // ... // 调用远程服务 serviceB.callServiceB(); } } ``` Seata 的集成能够有效解决分布式系统中的事务一致性问题,但需要根据业务场景选择合适的模式。 --- ### 总结 在 RuoYi-Cloud-Plus 中,模块调用 Service 方法可以通过多种方式实现: - **Feign**:适用于声明式服务调用,简化开发流程。 - **Dubbo**:适用于高性能的 RPC 调用,提供更细粒度的服务治理能力。 - **RestTemplate**:适用于简单的 HTTP 调用,但需要手动处理服务发现。 - **Sentinel**:用于熔断和限流,提高系统的稳定性。 - **Seata**:用于分布式事务,保证多个服务之间的数据一致性。 根据具体的业务需求和技术场景,可以选择合适的调用方式[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值