我正在尝试设置多线程应用程序的跟踪。我已设置线程池:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setThreadNamePrefix("XXXXXX-");
executor.initialize();
所以有几个线程。其中一个线程正在侦听SQS队列:
@Scheduled(fixedRateString = "${processing.queue.period:60000}")
public void process() {
..........................................................................
for (SQSMessage sqsMessage : sqsMessages) {
String messageReceiptHandle = null;
try {
messageReceiptHandle = sqsMessage.getReceiptHandle();
processMessage(sqsMessage);
}
}
}
..........................................................................
public void processMessage(SQSMessage sqsMessage) throws InterruptedException {
log.debug("Start Processing request: '{}'.", sqsMessage);
monitoringWorker.addEntityForMonitoring(sqsMessage, processor);
processor.processMessage(sqsMessage);
monitoringWorker.removeEntityForMonitoring(sqsMessage.getStagingPrefix());
}
在此代码段中
monitoringWorker.addEntityForMonitoring(sqsMessage, processor);
@Component
public class MonitoringWorker {
private List<EntityToMonitor> entitiesForMonitoring = new ArrayList<>();
public void addEntityForMonitoring(AssetSQSMessage assetSQSMessage, AssetProcessorService service) {
entitiesForMonitoring.add(new EntityToMonitor(assetSQSMessage, service));
}
@Scheduled(fixedDelay = 1000)
public void monitor() {
for (EntityToMonitor entity : entitiesForMonitoring) {
log.info("testmessage");
}
}
使用LazyTraceExecutor
。该类将traceID传播到新线程,并在该过程中创建新的spanID。
有关更多详细信息,请参阅
问题内容: 也许,我做错了,但在以下情况下我找不到好的出路。 我想对使用下面的Spring Batch执行作业的服务进行单元测试。通过在单独的线程中预配置来执行作业。在我的单元测试中,我想: 创建几个域对象并通过DAO持久化它们 调用服务方法启动工作 等待作业完成 使用DAO检索域对象并检查其状态 显然,以上所有操作都应在一个事务中执行,但是不幸的是,事务不会传播到新线程中(我理解这背后的原理)。
我尝试在我的微服务中添加一个分布式跟踪(在Azure中的Kubernetes下)。 我在父pom.xml中添加了依赖项: 我使用1.4.1和Camden.sr4是因为fabric8 kubeflix不支持较新的版本。我强制使用1.1.3版本来尝试最新的sleuth版本,看看它是否是sleuth旧版本中的一个bug。 我使用logback-spring.xml的以下配置: 这是我的applicati
问题内容: 我有两个 newAccessLevels.java ,它有两个按钮“ Level 1”,“ Level 2”和 newAccessPanel.java。 我需要获取用户选择“ 1或2”的级别,以便可以在标题中显示它。 accessPanel.java, 例如访问级别1,访问级别2。如何完成此操作。下面是示例代码,因此,如果单击级别1,则将打开标题为* ACCESS LEVEL 1 的n
我有一些spring服务可以提交一些AWS批处理作业。这是调用外部服务请求的简单spring批处理作业。并且我想通过将“org.springframework.cloud:spring-cloud-starter-sleuth”lib包含到classpath中,将在我的服务中生成的traceId传播到这个作业中,并将“traceRestTemplateInterceptor”拦截器添加到用这个tr
我想将GitLab CI与.gitlab-ci.yml文件一起使用以使用单独的脚本运行不同的阶段。第一阶段生成一个工具,该工具必须在稍后阶段用于执行测试。我已将生成的工具声明为工件。 现在我如何在后期工作中执行该工具?正确的路径是什么,它周围会有哪些文件? 例如,第一阶段构建工件/bin/TestTool/TestTool。exe,该目录包含其他必需的文件(DLL和其他文件)。我的gitlab c
问题内容: 我想将多个值从一个servlet传递到另一个servlet。请告诉我如何通过? 问题答案: 取决于您是否使用会话: 使用session.setAttribute()将数组存储在会话变量中。 使用session.getAttribute();检索数组。 但是,变量将一直保留到会话终止,您用其他东西覆盖它或将其删除为止。 如果将一个servlet转发到另一个servlet,则可以将其存储在