У меня есть две конечные точки отдыха, они оба получают некоторые данные (количество) для определенного устройства (или списка устройств). Единственная разница между двумя конечными точками - это Postgres (TimeScaledB). Теперь, когда я вызываю две конечные точки одновременно, иногда я получаю результаты замены. У меня нет идей, и больше всего я не понимаю, как это может произойти.
Код: Выделить всё
@Path("/api/prefix/foo")
public class DeviceCountResource {
private static final Logger logger = Logger.getLogger(DeviceCountResource.class);
@Inject
DeviceEventService deviceEventService;
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{agent_id}/device/status-change-count")
public Uni getDeviceStatusChangeCount(
@PathParam("agent_id") Long agentId,
@QueryParam("device_ids") @Separator(",") List deviceIds
) {
return deviceEventService.getStatusChangeCount(agentId, deviceIds)
.invoke(counters ->
logger.debugf(
"Retrieved counters status change: %s",
counters
));
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{agent_id}/device/heartbeat-count")
public Uni getHeartbeatCount(
@PathParam("agent_id") Long agentId,
@QueryParam("device_ids") @Separator(",") List deviceIds
) {
return deviceEventService.getHeartbeatCount(agentId, deviceIds)
.invoke(counters ->
logger.debugf(
"Retrieved counters heartbeat: %s",
counters
)
);
}
}
< /code>
@ApplicationScoped
public class DeviceEventService {
private static final Logger logger = Logger.getLogger(
DeviceEventService.class
);
@Inject
DeviceEventRepository deviceEventRepository;
@Inject
DeviceStatusCountRepository deviceStatusCountRepository;
@WithSpan
public Uni getStatusChangeCount(
Long agentId, List deviceIds
) {
return deviceStatusCountRepository.getStatusChangeCount(agentId, deviceIds);
}
@WithSpan
public Uni getHeartbeatCount(
Long agentId, List deviceIds
) {
return deviceStatusCountRepository.getHeartbeatCount(agentId,
deviceIds);
}
}
< /code>
@ApplicationScoped
public class DeviceEventService {
private static final Logger logger = Logger.getLogger(
DeviceEventService.class
);
@Inject
DeviceEventRepository deviceEventRepository;
@Inject
DeviceStatusCountRepository deviceStatusCountRepository;
@WithSpan
public Uni getStatusChangeCount(
Long agentId, List deviceIds
) {
return deviceStatusCountRepository.getStatusChangeCount(agentId, deviceIds);
}
@WithSpan
public Uni getHeartbeatCount(
Long agentId, List deviceIds
) {
return deviceStatusCountRepository.getHeartbeatCount(agentId,
deviceIds);
}
}
< /code>
@ApplicationScoped
public class DeviceStatusCountRepository {
private static final Logger logger = Logger.getLogger(
DeviceStatusCountRepository.class
);
@Inject
@ReactiveDataSource("timescale")
private Pool client;
@WithSpan
public Uni getStatusChangeCount(long agentId, List deviceIds) {
StringBuilder queryBuilder = new StringBuilder("SELECT device_id, up_down_count FROM table_1_with_count WHERE agent_id = $1");
List params = new ArrayList();
params.add(agentId);
if (deviceIds != null && !deviceIds.isEmpty()) {
queryBuilder.append(" AND device_id IN (");
for (int i = 0, j = 2; i < deviceIds.size(); i++, j++) {
if (i > 0) queryBuilder.append(",");
queryBuilder.append("$");
queryBuilder.append(j);
}
queryBuilder.append(")");
params.addAll(deviceIds);
}
String query = queryBuilder.toString();
logger.debugf("Query: %s", query);
return client.withConnection( connection -> connection
.preparedQuery(query)
.execute(Tuple.from(params))
.map(rows -> {
logger.debugf("Query field up_down_count");
List events = new ArrayList();
for (Row row : rows) {
DeviceCountOutDto event = new DeviceCountOutDto(
row.getLong("device_id"),
row.getInteger("up_down_count")
);
events.add(event);
}
return events;
})
);
}
@WithSpan
public Uni getHeartbeatCount(long agentId,
List deviceIds) {
StringBuilder queryBuilder = new StringBuilder("SELECT device_id, heartbeat_count FROM table_2_with_count WHERE agent_id = $1");
List params = new ArrayList();
params.add(agentId);
if (deviceIds != null && !deviceIds.isEmpty()) {
queryBuilder.append(" AND device_id IN (");
for (int i = 0, j = 2; i < deviceIds.size(); i++, j++) {
if (i > 0) queryBuilder.append(",");
queryBuilder.append("$");
queryBuilder.append(j);
}
queryBuilder.append(")");
params.addAll(deviceIds);
}
String query = queryBuilder.toString();
logger.debugf("Query: %s", query);
return client.withConnection( connection -> connection
.preparedQuery(query)
.execute(Tuple.from(params))
.map(rows -> {
logger.debugf("Query field heartbeat_count");
List events = new ArrayList();
for (Row row : rows) {
DeviceCountOutDto event = new DeviceCountOutDto(
row.getLong("device_id"),
row.getInteger("heartbeat_count")
);
events.add(event);
}
return events;
})
);
}
}
< /code>
pom.xml
& l t ; m o d e l V e r s i o n & g t ; 4 . 0 . 0 & l t ; / m o d e l V e r s i o n & g t ; < b r / > & l t ; g r o u p I d & g t ; c o m . c o m p a n y . n a m e & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; n a m e & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 1 . 1 . 0 - S N A P S H O T & l t ; / v e r s i o n & g t ; < b r / > < b r / > & l t ; p r o p e r t i e s & g t ; < b r / > & l t ; c o m p i l e r - p l u g i n . v e r s i o n & g t ; 3 . 1 3 . 0 & l t ; / c o m p i l e r - p l u g i n . v e r s i o n & g t ; < b r / > & l t ; m a v e n . c o m p i l e r . r e l e a s e & g t ; 2 1 & l t ; / m a v e n . c o m p i l e r . r e l e a s e & g t ; < b r / > & l t ; p r o j e c t . b u i l d . s o u r c e E n c o d i n g & g t ; U T F - 8 & l t ; / p r o j e c t . b u i l d . s o u r c e E n c o d i n g & g t ; < b r / > & l t ; p r o j e c t . r e p o r t i n g . o u t p u t E n c o d i n g & g t ; U T F - 8 & l t ; / p r o j e c t . r e p o r t i n g . o u t p u t E n c o d i n g & g t ; < b r / > & l t ; q u a r k u s . p l a t f o r m . a r t i f a c t - i d & g t ; q u a r k u s - b o m & l t ; / q u a r k u s . p l a t f o r m . a r t i f a c t - i d & g t ; < b r / > & l t ; q u a r k u s . p l a t f o r m . g r o u p - i d & g t ; i o . q u a r k u s . p l a t f o r m & l t ; / q u a r k u s . p l a t f o r m . g r o u p - i d & g t ; < b r / > & l t ; q u a r k u s . p l a t f o r m . v e r s i o n & g t ; 3 . 2 1 . 3 & l t ; / q u a r k u s . p l a t f o r m . v e r s i o n & g t ; < b r / > & l t ; s k i p I T s & g t ; t r u e & l t ; / s k i p I T s & g t ; < b r / > & l t ; s u r e f i r e - p l u g i n . v e r s i o n & g t ; 3 . 5 . 2 & l t ; / s u r e f i r e - p l u g i n . v e r s i o n & g t ; < b r / > & l t ; o r g . m a p s t r u c t . v e r s i o n & g t ; 1 . 6 . 3 & l t ; / o r g . m a p s t r u c t . v e r s i o n & g t ; < b r / > & l t ; / p r o p e r t i e s & g t ; < b r / > < b r / > & l t ; s c m & g t ; < b r / > & l t ; d e v e l o p e r C o n n e c t i o n & g t ; s c m : g i t : h t t p s : / / b i t b u c k e t . o r g / c o m p a n y / n a m e . g i t & l t ; / d e v e l o p e r C o n n e c t i o n & g t ; < b r / > & l t ; t a g & g t ; H E A D & l t ; / t a g & g t ; < b r / > & l t ; / s c m & g t ; < b r / > < b r / > & l t ; d e p e n d e n c y M a n a g e m e n t & g t ; < b r / > & l t ; d e p e n d e n c i e s & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; $ { q u a r k u s . p l a t f o r m . g r o u p - i d } & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; $ { q u a r k u s . p l a t f o r m . a r t i f a c t - i d } & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; $ { q u a r k u s . p l a t f o r m . v e r s i o n } & l t ; / v e r s i o n & g t ; < b r / > & l t ; t y p e & g t ; p o m & l t ; / t y p e & g t ; < b r / > & l t ; s c o p e & g t ; i m p o r t & l t ; / s c o p e & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; $ { q u a r k u s . p l a t f o r m . g r o u p - i d } & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - c a s s a n d r a - b o m & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; $ { q u a r k u s . p l a t f o r m . v e r s i o n } & l t ; / v e r s i o n & g t ; < b r / > & l t ; t y p e & g t ; p o m & l t ; / t y p e & g t ; < b r / > & l t ; s c o p e & g t ; i m p o r t & l t ; / s c o p e & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; / d e p e n d e n c i e s & g t ; < b r / > & l t ; / d e p e n d e n c y M a n a g e m e n t & g t ; < b r / > < b r / > & l t ; d e p e n d e n c i e s & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - r e s t & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - a r c & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - h i b e r n a t e - v a l i d a t o r & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - r e s t - j a c k s o n & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - s m a l l r y e - h e a l t h & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - s m a l l r y e - o p e n a p i & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - j a c o c o & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - m e s s a g i n g - r a b b i t m q & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - j d b c - p o s t g r e s q l & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - c o n t a i n e r - i m a g e - d o c k e r & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - o p e n t e l e m e t r y & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - j u n i t 5 & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; s c o p e & g t ; t e s t & l t ; / s c o p e & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; c o m . d a t a s t a x . o s s . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; c a s s a n d r a - q u a r k u s - c l i e n t & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k i v e r s e . l o g g i n g s e n t r y & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - l o g g i n g - s e n t r y & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 2 . 1 . 3 & l t ; / v e r s i o n & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . r e s t - a s s u r e d & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; r e s t - a s s u r e d & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; s c o p e & g t ; t e s t & l t ; / s c o p e & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; o r g . m a p s t r u c t & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; m a p s t r u c t & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; $ { o r g . m a p s t r u c t . v e r s i o n } & l t ; / v e r s i o n & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; d e . s i e g m a r & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; f a s t c s v & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 3 . 4 . 0 & l t ; / v e r s i o n & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; o r g . a w a i t i l i t y & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; a w a i t i l i t y & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; s c o p e & g t ; t e s t & l t ; / s c o p e & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; d e p e n d e n c y & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - j u n i t 5 - m o c k i t o & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; s c o p e & g t ; t e s t & l t ; / s c o p e & g t ; < b r / > & l t ; / d e p e n d e n c y & g t ; < b r / > & l t ; / d e p e n d e n c i e s & g t ; < b r / > < b r / > & l t ; b u i l d & g t ; < b r / > & l t ; p l u g i n s & g t ; < b r / > & l t ; p l u g i n & g t ; < b r / > & l t ; g r o u p I d & g t ; i o . q u a r k u s . p l a t f o r m & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; q u a r k u s - m a v e n - p l u g i n & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; $ { q u a r k u s . p l a t f o r m . v e r s i o n } & l t ; / v e r s i o n & g t ; < b r / > & l t ; e x t e n s i o n s & g t ; t r u e & l t ; / e x t e n s i o n s & g t ; < b r / > & l t ; e x e c u t i o n s & g t ; < b r / > & l t ; e x e c u t i o n & g t ; < b r / > & l t ; g o a l s & g t ; < b r / > & l t ; g o a l & g t ; b u i l d & l t ; / g o a l & g t ; < b r / > & l t ; g o a l & g t ; g e n e r a t e - c o d e & l t ; / g o a l & g t ; < b r / > & l t ; g o a l & g t ; g e n e r a t e - c o d e - t e s t s & l t ; / g o a l & g t ; < b r / > & l t ; g o a l & g t ; n a t i v e - i m a g e - a g e n t & l t ; / g o a l & g t ; < b r / > & l t ; / g o a l s & g t ; < b r / > & l t ; / e x e c u t i o n & g t ; < b r / > & l t ; / e x e c u t i o n s & g t ; < b r / > & l t ; / p l u g i n & g t ; < b r / > & l t ; p l u g i n & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; m a v e n - c o m p i l e r - p l u g i n & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; $ { c o m p i l e r - p l u g i n . v e r s i o n } & l t ; / v e r s i o n & g t ; < b r / > & l t ; c o n f i g u r a t i o n & g t ; < b r / > & l t ; p a r a m e t e r s & g t ; t r u e & l t ; / p a r a m e t e r s & g t ; < b r / > & l t ; r e l e a s e & g t ; $ { m a v e n . c o m p i l e r . r e l e a s e } & l t ; / r e l e a s e & g t ; < b r / > & l t ; a n n o t a t i o n P r o c e s s o r P a t h s & g t ; < b r / > & l t ; p a t h & g t ; < b r / > & l t ; g r o u p I d & g t ; o r g . m a p s t r u c t & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; m a p s t r u c t - p r o c e s s o r & l t ; / artifactId>
${org.mapstruct.version}
maven-surefire-plugin
${surefire-plugin.version}
containers
org.jboss.logmanager.LogManager
${maven.home}
maven-failsafe-plugin
${surefire-plugin.version}
integration-test
verify
${project.build.directory}/${project.build.finalName}-runner
org.jboss.logmanager.LogManager
${maven.home}
containers
org.apache.maven.plugins
maven-pmd-plugin
3.22.0
150
/rulesets/java/quickstart.xml
verify
check
org.apache.maven.plugins
maven-release-plugin
3.1.1
org.codehaus.mojo
versions-maven-plugin
2.18.0
org.codehaus.mojo
build-helper-maven-plugin
3.6.0
parse-version
initialize
parse-version
org.cyclonedx
cyclonedx-maven-plugin
2.9.1
package
makeAggregateBom
native
native
false
true
Подробнее здесь: https://stackoverflow.com/questions/796 ... ed-results