对seata的seata.tx-service-group理解 如果引入了seata.tx-service-group,我们每个serviceA,serviceB都配置相同的seata.tx-service-group=project1,然后配置中心映射project1对应的是seate-server1,如果seate-server1挂了,我们只需要修改配置中心,把project1映射到seata-server2,都不需要修改每个serviceA,serviceB的配置。这里多了一层获取事务分组到映射集群的配置。
rocketmq是如何消费 删除msgTreeMap消费过的消息,返回剩下最小的offset,并且把它设置为后面要异步提交的offset。然后消费拉取回来的消息,以并行消费为例,把拉取数量为pullBatchSize的消息,以每批consumeMessageBatchMaxSize,分成若干批。如果是有序消费,先从msgTreeMap poll前consumeBatchSize的消息,然后通过上锁,使得相同队列的不同批次消费串行进行。拉取消息成功后设置下一次需要拉取的offset,然后扔进消费线程池里消费。
kafka消费的细节 猜想,每次获取拉取消息的response应该会含有下一次 需要我们传的offset,然后更新到TopicPartitionState,我们下次拉取消息是通过TopicPartitionState获得要传的offset。kafka每次去poll消息,向服务端传topic-分区号,offset(开始的offset),maxBytes(最大字节数)每次poll,获取records后,会把position设为最后的那个record的offset,如果消费代码是。如果想每消费一条,就提交一条,就要。
eureka和nacos区别 调用DiscoveryClient的getInstances(id)时,如果没有的话,会执行HostReactor的scheduleUpdateIfAbsent方法,最终执行UpdateTask,最后执行updateServiceNow,把udp端口传过去。假如服务提供者下线了,那么消费者是如何维护服务列表?会通过udp,让nacos service主动推送。eureka通过定时任务去同步注册中心的服务列表,那么该注册中心是如何知道该udp端口?
多线程能否提高jdbc插入速度? 结论:不使用批量插入的话,多线程确实能提高插入速度,如果使用批量插入,单线程多线程都差不多(其实和kafka批量提交差不多)。如果不用批量插入(batchSize=1),插入400000行。
m选n,并且对n全排列,不允许重复 package sftp;import java.util.*;public class Dfs { public static void main(String[] args) {// int[] count={1,2,3};// dfs(count,0,new int[3],0,3); Entity[] entities = new Entity[3]; entities[0] = new Entity(); .
flowable的DefaultDeploymentCache的优化 在纯内存的配置下,多线程压测发现cpu使用率不到100%,于是打印线程栈发现好多线程都block。进去看了一下DefaultDeploymentCache用的是LinkedHashMap,而且Collections.synchronizedMap同步包装一下,LinkedHashMap每次get的时候都会调整链表结构,所以他读的时候一定是相互排斥的,才能保证线程安全!优化一下,增加一层,类似于读写分离的做法然后cpu使用率达到100%了...
查看那些行被锁 mysql:SELECT * from performance_schema.data_locks;oracle:select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and ...
jpa乐观锁 创建SingleTableEntityPersister时会调用generateUpdateString生成updateSql,update ACT_HI_ACTINST set xxxx where ID_=? and REV_=?update完之后commit时,会调用getNextVersion调用Versioning.increment( entry.getVersion(), persister.getVersionType(), event.getSession() ...
包容网关源码 else if (executionEntity.getId().equals(execution.getId()) && executionEntity.isActive()) { // Special case: the execution has reached the inc gw, but the operation hasn't been executed yet for that execution ...
cancelActivity的作用 cancelActivity为true,则interrupting为trueexecuteInterruptingBehavior会调用deleteChildExecutions(attachedRefScopeExecution, executionEntity, commandContext);把usertask删掉
flowable缓存与查询同步问题 runtimeService.createExecutionQuery().onlySubProcessExecutions().list()结果发现executions没有想要的结果,但是换成了executionDataManager.findInactiveExecutionsByActivityIdAndProcessInstanceId("subProcess","900224");就会有想要的结果,为啥呢?runtimeService.createExecutionQuery().