海口市建设局网站/批量关键词调排名软件
概述
最近在想做个cloud项目,gitee上找了个模板项目,后端使用到 Nacos、Gateway、Security等技术,看到 OpenFeign 组件 实现服务之间的通信 用得很好,再次分享一下。
Feign
Feign是Netflix公司写的,是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,是SpringCloud中的第一代负载均衡客户端。
- Feign是一个声明式WebService客户端。
- 使用Feign能让编写Web Service客户端更加简单。
- 它的使用方法是定义一个服务接口然后在上面添加注解。
- Feign也支持可拔插式的编码器和解码器。
Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡
OpenFeign
Feign是在2019就已经不再更新了,通过maven网站就可以看出来,随之取代的是OpenFeign,从名字上就可以知道,它是Feign的升级版。
OpenFeign是SpringCloud自己研发的,在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。是SpringCloud中的第二代负载均衡客户端。
Feign依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
OpenFeign 依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
实践
需求
文件分布
SmsApi (PpenFeign 接口)
/*** 短信服务API** @author lanys*/
@FeignClient(name = ServerNames.MESSAGE_SERVER_NAME)
public interface SmsApi {/*** 发送短信** @param mobile 手机号* @param params 参数* @return 是否发送成功*/@PostMapping(value = "api/message/sms/send")Result<Boolean> send(@RequestParam("mobile") String mobile, @RequestParam("params") Map<String, String> params);/*** 发送短信** @param mobile 手机号* @param key 参数KEY* @param value 参数Value* @return 是否发送成功*/@PostMapping(value = "api/message/sms/sendCode")Result<Boolean> sendCode(@RequestParam("mobile") String mobile, @RequestParam("key") String key, @RequestParam("value") String value);/*** 效验短信验证码** @param mobile 手机号* @param code 验证码* @return 是否效验成功*/@PostMapping(value = "api/message/sms/verifyCode")Result<Boolean> verifyCode(@RequestParam("mobile") String mobile, @RequestParam("code") String code);
}
SmsApiImpl(短信模块服务)
@RestController
@AllArgsConstructor
public class SmsApiImpl implements SmsApi {private final SmsService smsService;private final SmsSendCache smsSendCache;@Overridepublic Result<Boolean> send(String mobile, Map<String, String> params) {boolean flag = smsService.send(mobile, params);return Result.ok(flag);}@Overridepublic Result<Boolean> sendCode(String mobile, String key, String value) {// 短信参数Map<String, String> params = new HashMap<>();params.put(key, value);// 发送短信boolean flag = smsService.send(mobile, params);if (flag) {smsSendCache.saveCode(mobile, value);}return Result.ok(flag);}@Overridepublic Result<Boolean> verifyCode(String mobile, String code) {boolean flag = false;String value = smsSendCache.getCode(mobile);if (value != null) {// 删除短信验证码smsSendCache.deleteCode(mobile);// 效验flag = value.equalsIgnoreCase(code);}return Result.ok(flag);}
}
测试
@RestController
@Tag(name="新增模块演示")
@AllArgsConstructor
public class TestController {private final StorageApi storageApi;private final SmsApi smsApi;@GetMapping("/send")public Result<Boolean> send () {Result<Boolean> code = smsApi.sendCode("18376662074", "code", RandomUtil.randomNumbers(6));System.out.println("返回结果:"+code);return Result.ok(true);}}
总结
目前展示的只是 OpenFeign 使用,短信发送代码(策略模式 + 模板模式)我并没有展示出来,使用目的已经达到,感兴趣的大佬,我可以提供项目地址git 。