Java知识星球
K、各种格式文件拼接为PDF
所需数据 首先需要将所有需要合并的文件转换成字节流也就是byte[] 然后把,每个数据都放到一个list 文件路径转换成byte[] 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354final List<String> collect = //你的文件路径集合logger.info("开始转换pdf");int totalUrls = collect.size();int batchSize = 20; // 每批文件数量int totalBatches = (int) Math.ceil((double) totalUrls / batchSize); // 共多少批任务if (totalBatches <=0 ) return new byte[0];ExecutorService executorService = //你的自定义线程池List<CompletableFuture< ...
X、工具类
PicUtil(文件压缩工具类) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152/** * 文件压缩工具类 * @author Eliauk */public class PicUtil { public static byte[] compressPictureForScale(String srcPath, long desFileSize, double accuracy) throws IOException { if (StringUtils.isEmpty(srcPath)) { return null; } File srcFile = new File(srcPath); if (!srcFile.exists()) { return null; } ...
Idea推送Github仓库超时问题
Idea推送Github仓库超时问题 有时候在本地推送Github的仓库的时候经常Time OUT 并且你挂了梯子之后还是会超时,这个时候只需要配置一下终端代理就行 寻找终端代理的 找到梯子的终端代理端口号然后替换掉下边指令的 1export https_proxy=http://127.0.0.1:33210 http_proxy=http://127.0.0.1:33210 all_proxy=socks5://127.0.0.1:33211 或者找到您对应的梯子的可视化界面复制终端代理的代码 配置终端代理 打开git bash 输入终端代理的代码 最后打开Idea重新推送代码就可以了
RabbitMQ如何保证消息不丢失?
RabbitMQ如何保证消息不丢失? 1、生产者需要做的 生产者重写 RabbitTemplate.ConfirmCallback的 confirm方法以及 returnedMessage 方法。 将 ack==false 的消息 持久化到数据库,定时扫描 DB 中投递失败的数据,重新投递到MQ中; 123456789101112131415161718192021222324252627282930313233343536/** * 生产者 确认消息的配置 * 此函数为回调函数,用于通知producer消息是否投递成功 * * @param correlationData 消息唯一ID * @param ack 确认消息是否被MQ 接收,true是已被接收,false反之 * @param cause */@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) { //投递成功 if (ack) { ...
RabbitMQ如何保证消息幂等?
RabbitMQ如何保证消息幂等? 1、生产端做消息幂等 (即不重复投递) 在生产端的话,其实消费端做好幂等,生产端就算投递多次,也无所谓了。 如果实在想在生产者做幂等的话,可以参考消费端的思路,比如通过redis的 setnx (key可以设计成 producer:具体业务:具有唯一性的某几个或者某一个业务字段 作为key) ,添加防重表等等。但是我个人觉得没必要。把消费端做好幂等就可以了。 2、消费端做消息幂等 (即不重复消费) A、方案 1234567891011121314151617181920 /** * 是否能消费,用于防止重复消费 * false 代表未消费过 ,true代表消费过 * * @param content * @param queueName * @return */private Boolean checkConsumedFlag(T content, String queueName) { String messageKey = queueName + ":" + conten ...
RabbitMQ消费者ack超时问题
报错信息 123Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code=40, reply-text-PRECONDITION FAILED - deliveryacknowledoement on channel 2 timed out, Timeout value used: 1800000 ms, This timeout yalue can be confaured. se consumers doc ouide to learmore. class-id=0.method-id=0) 解决方法 rabbitmq默认客户端超时时间是30分钟,手动ACK情况下会如果业务事件较长会超时,可以采用下面修改方式: 第一种:需要重启MQ 在etc目录下建一个文件,/etc/rabbitmq.conf,rabbitmq默认不会建这个文件,然后文件里面设置consumer_timeout = 360000(根据需要来决定)。然后重新启动rabbitmq。 第二 ...
RabbitMQ消费者ack超时问题
消息手动ack + 手动重试 1234567891011121314151617181920212223242526272829303132333435363738394041/** * 消息最大重试次数 */private static final int MAX_RETRIES = 3; /** * 重试间隔(秒) */private static final long RETRY_INTERVAL = 5; private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @RabbitListener(queues = RabbitMqConfig.USER_ADD_QUEUE, concurrency = "10")public void userAddReceiver(String data, Message message, Channel channel) throws IOException, InterruptedException { UserVo ...
Vavr(颠覆你对Java的认知)
Vavr(颠覆你对Java的认知) 什么是Vavr Vavr core是一个Java函数库。它有助于减少代码量并提高健壮性。函数式编程的第一步是开始思考不可变的值。Vavr 提供不可变的集合以及必要的函数和控制结构来操作这些值。 引入依赖 maven 1234567<dependencies> <dependency> <groupId>io.vavr</groupId> <artifactId>vavr</artifactId> <version>0.10.4</version> </dependency></dependencies> gradle 123dependencies { compile "io.vavr:vavr:0.10.4"} gradle 7+ 123dependencies { implementation "io.v ...
ElasticSearch和Kibana配置
ElasticSearch和Kibana配置 1、docker-comppose 1234567891011121314151617181920212223242526272829303132elasticsearch: container_name: gw-es image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 volumes: - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./elasticsearch/logs/elasticsearch.log:/usr/share/elasticsearch/logs/elasticsearch.log - ./elasticsearch/data:/usr/share/elasticsearch/data #配置文件挂载 - ./elasticsearch/plugins:/u ...
解析双层DDF
需引入Maven依赖 12345678910 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.27</version></dependency><dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.26</version></dependency> 1234567891011121314151617181920212223public Map<Integer, String> PDFIdentification(InputStream inputStream) { M ...
数据最终一致性问题
数据库和缓存Redis的一致性问题无论在面试还是平时使用的时候都是一个很常见且关键的问题这里我写一篇文章记录一下 Cache-Aside 旁路缓存模式,应用最为广泛的一种缓存策略。 读请求 首先查询redis查看是否存在,如果存在的话直接返回数据,如果不存在查询数据库,然后写入缓存 写请求 直接更新数据库然后删除缓存 为什么先更新数据库,而不是先删除缓存 因为在并发的情况下如果线程A先去删除缓存然后线程B去查询了数据K,此时线程B查询了数据K,并且将数据写入了缓存,然后线程A才去更新了数据库,然后此时我们的缓存就会是一个旧数据所以不能先删除缓存 在这种情况下怎么解决缓存一致性的问题呢 由于先删除缓存后更新数据会有缓存脏数据,所以业内又提出了延时双删,也就是在删除数据之后,更新数据库,防止别的线程读取了数据产生了脏缓存延时之后再进行一次删除,这个延时的时间一般稍微大于业务的读时间耗时,但是无论这个值如何预估,都很难和读请求的完成时间点准确衔接,这也是延时双删被诟病的主要原因。 先更新数据之后再删除缓存就没有问题了么 肯定不是的,在读写并发的时候也是会出现数据不一致的问题的,下面列举一 ...
AQS万字解析
AQS源码 最近研究了一下AQS的源码这里写一篇文章讲一下AQS到底是干什么的怎么工作的 AbstractQueuedSynchronizer AbstractQueuedSynchronizer这个类大家应该都听说过,他是一个用于编写并发编程的框架,可以在他的基础上对一些方法进行重写实现不同的策略 可以看到我们这个类是一个抽象类,但是他里边并没有任何一个抽象方法,而是留有很多这种以protected关键字修饰的方法 那么可能会有疑问,为什么在抽象类中一个抽象方法都没有,而是好多这种默认方法呢,因为为了子类更好的实现定制化如果子类不去实现的话直接就会抛出异常,而不是像抽象方法一样必须重写。 然后我们看一下里边的Node节点是怎样的 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939 ...
avatar
🐟认真摸鱼中
Eliauk
Future is now 🍭🍭🍭
前往小窝
公告栏
Eliauk:我目前就职于金山旗下的数科网维,是一名Java开发工程师


并且我是Dromara社区的一员并且是Stream-Query的Committer,热衷于Open Source。有什么疑问可以加我微信Cizai_讨论一些技术问题


Dromara 是由国内顶尖的开源项目作者共同组成的开源社区。提供包括分布式事务,流行工具,企业级认证,微服务RPC,运维监控,Agent监控,分布式日志,调度编排等一系列开源产品、解决方案与咨询、技术支持与培训认证服务。技术栈全面开源共建、 保持社区中立,致力于为全球用户提供微服务云原生解决方案。让参与的每一位开源爱好者,体会到开源的快乐。Dromara开源社区目前拥有10+GVP项目,总star数量超过十万,构建了上万人的开源社区,有成千上万的个人及团队在使用Dromara社区的开源项目。
小站资讯
文章数目 :
51
本站总字数 :
6.5w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面