当前位置: 首页 > news >正文

广州企业建设网站免费外链发布平台

广州企业建设网站,免费外链发布平台,服装加工网上接单平台,wordpress的编辑器在微服务架构体系中远程RPC调用主要包括Dubbo与Http调用两个大类,由于Dubbo拥有服务注册中心,并且起服务的命名非常规范,使用包名.类名.方法名进行描述。 而http调用通常都是使用httpclient等相关类库,这些在使用上并没有问题&am…

在微服务架构体系中远程RPC调用主要包括Dubbo与Http调用两个大类,由于Dubbo拥有服务注册中心,并且起服务的命名非常规范,使用包名.类名.方法名进行描述。

而http调用通常都是使用httpclient等相关类库,这些在使用上并没有问题,但API都是分散在整个工程的各个地方,如果HTTP调用也可以使用类似Dubbo服务的表示方法,采用声明式定义就好了。

在开源的世界中只有想不到,没有找不到,为了解决Feign的声明式服务化管理,Feign框架应运而生,本文主要介绍如何使用Feign实现Http服务声明化管理与调用。

1.什么是Feign

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Feign通过注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,封装了http调用流程。

2、快速入门实例

2.1定义客户端

首先要引入Feign的maven依赖,如下图所示:

 <dependency><groupId>com.netflix.feign</groupId><artifactId>feign-core</artifactId><version>8.18.0</version></dependency>

2.2 定义服务调用API(类似Dubbo API)

服务调用的API声明代码如下所示:

@FeignClient
public interface HelloControllerApi {@RequestLine("GET /api/hello?name={name}")String hello(@Param(value = "name") String name);
}

这里的要点是使用@FeignClient进行声明。声明后就可以通过HelloControllerApi进行远程HTTP调用,示例代码如下:

public class HelloControllerApiTest {private HelloControllerApi service;@Beforepublic void before(){service = Feign.builder().options(new Request.Options(1000, 3500)).retryer(new Retryer.Default(5000, 5000, 3)).target(HelloControllerApi.class, "http://127.0.0.1:8080");}@Testpublic void hello(){// 调用http://127.0.0.1:8080/api/hello?name=world 的http接口System.out.println(service.hello("world"));}}

当然需要在调用方的启动类上增加@EnableFeignClients(defaultConfiguration = FeignConfiguration.class)注解。

2.3定义服务端

服务端与Feign并无关系,主要按照API的方式实现即可,服务端实现代码如下所示:

@Controller
@RequestMapping(value = "api")
public class HelloController {@RequestMapping(value = "/hello", method = {RequestMethod.GET})@ResponseBodypublic String list(@RequestParam String name) {return "Hello " + name;}
}//启动类
@SpringBootApplication(scanBasePackages = {"com.vhicool.manager"})
public class ManagerApplication {public static void main(String[] args) {SpringApplication.run(ManagerApplication.class, args);}
}

3.实现签名校验

上述只是简单实用Feign,接下来以实现签名校验为例展示Feign的扩展机制。

签名验证是最常见的安全机制,首先在客户端定义一个签名拦截器,用于生成签名信息,示范代码如下图所示:

public class AuthRequestInterceptor implements feign.RequestInterceptor {private TokenService tokenService;public AuthRequestInterceptor(TokenService tokenService) {this.tokenService = tokenService;}@Overridepublic void apply(RequestTemplate template) {template.header("token", tokenService.getToken());}}

并且在Feign的全局配置文件中创建对应的拦截器,示例代码如下:

public class FeignConfiguration {@Beanpublic RequestInterceptor authRequestInterceptor(ResourceIdentity resourceIdentity) {AuthRequestInterceptor authRequestInterceptor = new AuthRequestInterceptor(resourceIdentity);authRequestInterceptor.setErrorEncodeType(errorEncodeType);return authRequestInterceptor;}
}

同时在服务端获取token并对token进行校验,示例代码如下:

@Component
public class AuthFilter implements Filter {@Autowiredprivate TokenService tokeService;@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {String remoteToken = ((HttpServletRequest) servletRequest).getHeader("token");if(!tokeService.valid(token)) {//异常处理逻辑return;}filterChain.doFilter(servletRequest, servletResponse);}
}

4.服务端自动生成Feign

上面的示例虽然实现了服务接口的声明式管理,但调用端、客户端并没有显示的约束关系,接下来展示如何使用客户端、服务端使用继承方式定义服务调用API。

例如要实现如下图的效果:

原生的Feign无法实现该效果,我们需要使用OpenFeign类库,两者之间的对比如下图所示:

接下来详细介绍具体实现方法。

4.1 提取公共API

首先使用一个模块定义公共API,需要引入maven依赖,代码示例如下所示:

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

接下来定义公共的服务接口,客户端、服务端都需要实现该接口,公共服务端接口定义如下:

public interface IUserController {@RequestMapping(value = "user/list-all", method = {RequestMethod.GET})List<String> listAll(@RequestParam String name);
}

4.2 服务端实现公共API

首先需要添加相应的maven依赖,代码如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.vhicool</groupId><artifactId>feign-api</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency>

服务端采用继承方式实现,具体代码如下所示:

@Controller
@RequestMapping
public class UserController implements IUserController {@Override@ResponseBodypublic List<String> listAll(String name) {ArrayList<String> list = new ArrayList<>();list.add("达菲");list.add("olu");list.add(name);return list;}
}

4.3 客户端实现公共API

客户端首先同样需要增加相应的依赖,具体代码如下所示:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.1.5.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency><dependency><groupId>com.vhicool</groupId><artifactId>feign-api</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency>

客户端服务调用类需要继承公共API:

@FeignClient(value = "user", url = "http://localhost:8080")
public interface UserApi extends IUserController {
}

同时客户端启动类需要增加@EnableFeignClients注解,具体示例代码如下所示:

@SpringBootApplication
@EnableFeignClients
public class ManagerApplication {public static void main(String[] args) {SpringApplication.run(ManagerApplication.class, args);}
}

同样基于Springboot编程方式,可以为Feign配置全局参数,具体如下:

@Configuration
public class FeignConfiguration {/*** 请求超时时间* @return*/@Beanpublic Request.Options options() {return new Request.Options(2000, 3500);}//拦截器等定义
}

接下来客户端就可以用如下方式进行调用:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {@Autowiredprivate UserApi userApi;@Testpublic void listAll() {System.out.println(userApi.listAll("饼饼"));}
}

当前项目编译的jar包,类也已经被替换成我们自定义的类,目标达成。


用工具

成功的前端工程师很会善用工具,这些年低代码概念开始流行,像国外的 Mendix,国内的 JNPF,这种新型的开发方式,图形化的拖拉拽配置界面,并兼容了自定义的组件、代码扩展,确实在 B 端后台管理类网站建设中很大程度上的提升了效率。

开源地址:JNPF体验中心

代码量少,系统的稳定性和易调整性都会得到一定的保障。基于代码生成器,可一站式开发多端使用 Web、Android、IOS、微信小程序。代码自动生成后可以下载本地,进行二次开发,有效提高整体开发效率。同时,支持多种云环境部署、本地部署给予最大的安全保障,可以快速搭建适合自身应用场景的产品。

http://www.hkea.cn/news/655198/

相关文章:

  • 济宁哪家网站建设公司正规谷歌浏览器 免费下载
  • 有没有女的做任务的网站广东省新闻
  • seo长尾关键词优化如何做网站推广优化
  • 网站搭建服务合同seo排名赚
  • 东莞有什么比较好的网站公司苏州关键词排名系统
  • 做中国供应商免费网站有作用吗浙江网站推广运营
  • mysql8 wordpress百度推广优化是什么意思
  • 做装修广告网站好seo推广公司招商
  • 城市模拟建设游戏网站今天最新的新闻头条新闻
  • 手机网站自适应代码品牌网络营销策划方案
  • 个人网站建设在哪里百度资源搜索平台
  • 云空间免费空间北京网站优化校学费
  • 个人网站做导航网站项目推广平台有哪些
  • 威海住房建设局网站培训学校资质办理条件
  • 做趣味图形的网站免费线上培训平台
  • 女生做网站前端设计师成都网站seo
  • 濮阳建设银行官方网站搜索引擎优化的对比
  • 完全删除wordpressseo小白入门
  • 做网站常用到的css标签什么软件可以找客户资源
  • 有做销售产品的网站有哪些新闻头条今日新闻
  • 深圳自己做网站 服务器优化的近义词
  • 网站开发职业工资网站推广上首页
  • 宝安附近公司做网站建设多少钱深圳百度开户
  • 成都紧急通知seo网络营销招聘
  • 思坎普网站建设如何做营销推广
  • 太原网站优化公司有域名和服务器怎么建网站
  • 网站策划的前景seo 推广
  • wordpress导入网站文章怎么联系百度人工客服
  • 制冷机电工程东莞网站建设简阳seo排名优化培训
  • 北京网站建设 网站维护服装营销方式和手段