异步命令组件


github地址 https://github.com/bojiw/asyncmd
码云地址https://gitee.com/wangwendi/asyncmd

前言

以前有幸看过网商银行的一个异步命令组件源码 感觉功能比较实用 可以在挺多场景上使用 尤其现在领域驱动设计目前比较火 配合这个组件可以对领域内事件更好的支持 因为看目前也没有对应的开源组件 所以准备自己开发一个异步命令组件
QQ交流群 709378280

使用demo

https://github.com/bojiw/asyncmdDemo

异步命令组件核心功能

就是把一些耗时比较高并且可以异步处理的同步请求转换为异步处理来提高并发,并且把命令内容保存到数据库表中来提高数据可靠性并且通过重试来保证数据的最终一致性
image

注意:这个目前只是一个组件 只需要引入jar包 并且在自己的应用库中创建异步命令表 指定zookeeper地址就可以使用 并不是集中式单独部署一台应用进行使用 这样可以保证一个应用的异步命令积压或者使用有问题 不会影响到其他应用 也变相的把压力分摊到不同的应用中

使用逻辑

新建一个异步命令对象 一个异步命令执行器 把请求传过来的数据保存到这个异步命令对象中 调用组件到一个服务 就会把对象保存到表中 并且异步的执行创建的异步命令执行器 会把异步命令对象作为入参传进去 使用者只要在异步命令执行器中把后续逻辑写好就可以 重试之类的机制组件会自动完成

使用场景一

如果有了解DDD领域驱动设计的人知道其中有个比较重要的概念就是领域驱动事件,当发生某个本地事件需要通知到系统中其他领域模型进行处理时,就可以采用异步命令组件来通知 目前很多是采用spring的事件传播机制 不过通过这种来传播无法保证数据的可靠性

如何有不了解领域驱动事件的同学可以看下下面这篇文章 讲的比较容易懂
https://blog.csdn.net/weixin_33759269/article/details/91386492
** 下图为异步命令组件在目前主流的三种领域事件发送方式里的应用 目前领域外的事件更多的是采用第二种直接使用mq 异步命令组件主要是第三种情况使用比较多**

image

使用场景二

一般很多大公司的开放平台有些接口因为内部逻辑非常复杂 处理比较耗时 都是采用接收请求 保存起来 然后立刻返回调用方发送成功的结果 再异步慢慢处理 处理完以后再会回调调用方 也可能是默认肯定成功 这种就可以使用异步命令组件来实现 以前我们和一家公司合作 互相提供接口进行调用 因为另一家公司有一些老系统逻辑处理很慢 常常因为处理不过来导致连接超时 如果使用这个组件就可以先接收 然后再处理

使用场景三

优惠券系统要求可以创建一个任务 到指定时间赠送一批用户指定的优惠券 这时候可以用异步命令组件 设置下一次执行时间为指定的时间 到时间来自动执行对应的异步命令执行器进行赠送用户优惠券

使用场景四

营销活动常常需要完成某个条件就会给用户赠送积分、储值卡、金币、app通知等可以异步的操作 如果每次都在某个活动里写 会导致大量重复的赠送代码 可以采用异步命令组件创建一个赠送优惠异步命令 然后对应的异步命令执行器里实现赠送积分、储值卡、金币、app通知等操作 通过入参判断需要赠送哪些优惠 减少重复代码

使用场景五

一般接收mq的消息都是立刻处理业务逻辑 如果消费方的逻辑非常复杂消费需要很久 很容易导致消息处理不过来出现mq消息挤压 而影响整个公司的生产者和消费者 这时候可以采用异步命令组件 收到消息以后先保存到异步命令表 然后立刻通知mq消息已经收到了 提高消费速度 因为异步命令表是各个应用自己的 所以消费慢也只是会影响到应用自己的库 而不会影响全公司的消费方

使用场景。。。欢迎补充

以上的场景只是我能想到的部分 其实还有很多 核心其实就是可以支持同步转异步 并且组件可以保证可靠性和数据的最终一致性 只要是某些需求场景需要这个功能都可以用异步命令组件来实现

快速使用

1、引入jar

      <dependency>
          <groupId>com.bojiw</groupId>
          <artifactId>asyncmd-core</artifactId>
          <version>1.7</version>
      </dependency>

2、在spring的xml文件中 引入xml文件

    <import resource="classpath*:/META-INF/asyn/applicationContext.xml"/>

3、配置AsynGroupConfig

    <bean id="asynGroupConfig" class="com.asyncmd.config.Asyn
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现vben上传组件的数据回显,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了vben组件库。你可以通过以下命令来安装vben-upload组件: ``` npm install @vbenjs/vben-upload ``` 2. 在你的组件中引入vben-upload组件: ```vue <template> <vben-upload v-model="fileList" action="/upload" /> </template> <script> import { ref } from 'vue'; import { VbenUpload } from '@vbenjs/vben-upload'; export default { components: { VbenUpload, }, setup() { const fileList = ref([]); return { fileList, }; }, }; </script> ``` 3. 在上面的代码中,我们使用了`v-model`指令将`fileList`变量与上传组件进行绑定。`action`属性指定了上传文件的URL。 4. 接下来,你需要实现文件数据的回显。可以在组件的`setup`函数中通过异步请求获取已上传的文件数据,并将其赋值给`fileList`变量。 ```vue <script> import { ref, onMounted } from 'vue'; import { VbenUpload } from '@vbenjs/vben-upload'; export default { components: { VbenUpload, }, setup() { const fileList = ref([]); // 异步请求获取已上传的文件数据 const fetchUploadedFiles = async () => { try { const response = await fetch('/api/getUploadedFiles'); const data = await response.json(); fileList.value = data; // 将获取到的文件数据赋值给fileList } catch (error) { console.error(error); } }; onMounted(() => { fetchUploadedFiles(); // 组件挂载后调用fetchUploadedFiles函数获取已上传的文件数据 }); return { fileList, }; }, }; </script> ``` 在上面的代码中,我们在组件挂载后使用`onMounted`钩子函数调用`fetchUploadedFiles`函数来获取已上传的文件数据,并将其赋值给`fileList`变量。 这样,当你的页面加载时,vben-upload组件将会显示已上传的文件数据。 请注意,上述代码中的`/upload`和`/api/getUploadedFiles`只是示例URL,你需要根据你的实际情况进行相应的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值