首页 文章 精选 留言 我的

精选列表

搜索[供应链金融],共10000篇文章
优秀的个人博客,低调大师

银行回单识别技术:让机器真正“理解”金融文档

在财务人员的办公桌上,永远少不了一摞摞银行回单。这些巴掌大的小纸条,记录着每一笔资金的来龙去脉——谁付的钱、付了多少、付给了谁、什么时候付的。然而,就是这些不起眼的小纸条,却让无数财务人头疼不已:一张回单人工录入要花3到5分钟,错误率还高达3%到5%。碰上印章模糊、拍照歪斜、不同银行版式五花八门的情况,更是让人抓狂。

优秀的个人博客,低调大师

🔥 使用 httputils + sbe 实现金融级 java rpc

1、认识 Simple Binary Encoding (sbe) 高性能Java库 Agrona 的主要目标是减少性能瓶颈,通过提供线程安全的直接和原子缓冲区、无装箱操作的原始类型列表、开散列映射和集合以及锁-free队列等,为开发者在处理并发和低延迟场景时提供强大工具。 Simple Binary Encoding (sbe) 是 Agrona 的一部分,也是高性能通讯框架 Aeron 的一部分。 2、什么是 rpc ? 一讲 rpc ,很多人会想到 dubbo (国产)和 grpc。估计还会联想到注册与发现服务;可能还会联想到微服务。可能就会觉得这个事儿“老重啦”,害怕! 其实很简单的,你请求一次 http 就是个 rpc 请求了(远程过程调用嘛)。最典型的就是 http + json 请求了。 3、现在讲 httputils + sbe 这里我们会用到两个重要的solon 框架的插件:一个是 httputils 工具插件,一个是 abc + agrona 序列化插件(abc 适配了多个编解码方案)。 <!-- 这是 sbe 的编解码包装器 --> <dependency> <groupId>org.noear</groupId> <artifactId>solon-serialization-abc</artifactId> </dependency> <dependency> <groupId>org.agrona</groupId> <artifactId>agrona</artifactId> <version>${agrona-sbe.version}</version> </dependency> <dependency> <groupId>org.noear</groupId> <artifactId>solon-net-httputils</artifactId> </dependency> 这里要感谢 solon 框架,它强调三元合一(mvc 与 rpc 是自然一体的)。下面,开始干活啦... 公用包(也可以在客户端,服务端分别定义实体类。只要实现 SbeSerializable 接口即可 ) 这里定义一个 sbe 实体类。注意要实现 SbeSerializable 接口。 @Getter @Setter public class MessageDo implements SbeSerializable { private long id; private String title; @Override public void serializeRead(SbeInput in) { id = in.readLong(); title = in.readString(); } @Override public void serializeWrite(SbeOutput out) { out.writeLong(id); out.writeString(title); } } 服务端(只支持 @Body 数据接收,只支持实体类) 在 solon web 项目里,添加一个控制器(注解可以用@Remoting或@Controller)。使用@Remoting时,方法上不需要加@Mapping注解。 #添加插件 org.noear:solon-web org.noear:solon-serialization-abc org.agrona:agrona:${agrona-sbe.version} # 提供 sbe 序列化支持 @Mapping("/rpc/demo") @Remoting public class HelloServiceImpl { @Override public MessageDo hello(@Body MessageDo message) { //还可接收路径变量,与请求上下文 return message; } } 客户端应用 for HttpUtils(只支持 body 数据提交,只支持实体类) #添加插件 org.noear:solon-net-httputils org.noear:solon-serialization-abc org.agrona:agrona:${agrona-sbe.version} # 提供 sbe 序列化支持 //应用代码 @Component public class DemoCom { public MessageDo hello() { MessageDo message = new MessageDo(); message.setId(3); //指明请求数据为 ABC,接收数据要 ABC return HttpUtils.http("http://localhost:8080/rpc/demo/hello") .serializer(AbcBytesSerializer.getInstance()) .header(ContentTypes.HEADER_CONTENT_TYPE, ContentTypes.ABC_VALUE) .header(ContentTypes.HEADER_ACCEPT, ContentTypes.ABC_VALUE) .bodyOfBean(message) .postAs(MessageDo.class); } } 4、总结 总体上,跟 json 没什么大的区别。主要是指定了:序列化器、内容类型、接收类型,让各端能识别类据类型。 5、还可以使用“注解式 http 客户端”框架 肯定也会有人觉得,一个接口还好,如果有很多接口就要写很多重复的http请求代码了。所以,“注解式 http 客户端” 很重要,这也是很多 rpc 框架流行的原因,就像调用本地接口一样,使用远程接口。 nami 是 solon 框架的 rpc 客户端(或者,注解式 http 客户端),支持各种序列化。(只要是“支持序列化定制”的注解式 http 客户端,都可用!) 添加两个依赖包 #添加插件 org.noear:nami-coder-abc # abc 编解码支持 org.noear:nami-channel-http # http 请求通道支持,也可以是 socketd(支持 tcp, udp, ws) org.agrona:agrona:${agrona-sbe.version} # 提供 sbe 序列化支持 代码应用(只支持 body 数据提交,只支持实体类) @NamiClient(url = "http://localhost:8080/rpc/demo", headers = {ContentTypes.ABC, ContentTypes.ABC_ACCEPT}) public interface HelloService { MessageDo hello(@NamiBody MessageDo message); //方法2 //方法3 //方法4 //方法5 //方法6 } @Component public class DemoCom { @NamiClient //注入 HelloService helloService; public MessageDo hello() { MessageDo message = new MessageDo(); message.setId(3); rerturn helloService.hello(message); } }

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册