public ConsumeParam(String subject, String group, boolean isBroadcast, boolean isConsumeMostOnce, TagType tagType, Set<String> tags, String clientId) { this.subject = subject; this.group = group; this.originSubject = RetrySubjectUtils.isRetrySubject(subject) ? RetrySubjectUtils.getRealSubject(subject) : subject; this.retrySubject = RetrySubjectUtils.buildRetrySubject(originSubject, group); this.consumerId = clientId; this.isBroadcast = isBroadcast; this.isConsumeMostOnce = isConsumeMostOnce; this.tagType = tagType; this.tags = tags; }
public void heartbeat(String consumerId, String subject, String group) { final String realSubject = RetrySubjectUtils.getRealSubject(subject); final String retrySubject = RetrySubjectUtils.buildRetrySubject(realSubject, group); refreshSubscriber(realSubject, group, consumerId); refreshSubscriber(retrySubject, group, consumerId); }
private void putNeedRetryMessages(String subject, String group, String consumerId, List<SegmentBuffer> needRetryMessages) { try { for (SegmentBuffer buffer : needRetryMessages) { final ByteBuf message = Unpooled.wrappedBuffer(buffer.getBuffer()); final RawMessage rawMessage = QMQSerializer.deserializeRawMessage(message); if (!RetrySubjectUtils.isRetrySubject(subject)) { final String retrySubject = RetrySubjectUtils.buildRetrySubject(subject, group); rawMessage.setSubject(retrySubject); } final PutMessageResult putMessageResult = storage.appendMessage(rawMessage); if (putMessageResult.getStatus() != PutMessageStatus.SUCCESS) { LOG.error("put message error, consumer:{} {} {}, status:{}", subject, group, consumerId, putMessageResult.getStatus()); throw new RuntimeException("put retry message error"); } } } finally { needRetryMessages.forEach(SegmentBuffer::release); } QMon.putNeedRetryMessagesCountInc(subject, group, needRetryMessages.size()); }
@Override public synchronized void regist(String subject, String group, RegistParam param) { registPullEntry(subject, group, param, new AlwaysPullStrategy()); registPullEntry(RetrySubjectUtils.buildRetrySubject(subject, group), group, param, new WeightPullStrategy()); }
private synchronized void changeOnOffline(String subject, String group, boolean isOnline, StatusSource src) { final String realSubject = RetrySubjectUtils.getRealSubject(subject); final String retrySubject = RetrySubjectUtils.buildRetrySubject(realSubject, group); final String key = MapKeyBuilder.buildSubscribeKey(realSubject, group); final PullEntry pullEntry = pullEntryMap.get(key); changeOnOffline(pullEntry, isOnline, src); final PullEntry retryPullEntry = pullEntryMap.get(MapKeyBuilder.buildSubscribeKey(retrySubject, group)); changeOnOffline(retryPullEntry, isOnline, src); final DefaultPullConsumer pullConsumer = pullConsumerMap.get(key); if (pullConsumer == null) return; if (isOnline) { pullConsumer.online(src); } else { pullConsumer.offline(src); } }
AckSendQueue(String brokerGroupName, String subject, String group, AckService ackService, BrokerService brokerService, SendMessageBack sendMessageBack, boolean isBroadcast) { this.brokerGroupName = brokerGroupName; this.subject = subject; this.group = group; this.ackService = ackService; this.brokerService = brokerService; this.sendMessageBack = sendMessageBack; this.isBroadcast = isBroadcast; String realSubject = RetrySubjectUtils.isRetrySubject(subject) ? RetrySubjectUtils.getRealSubject(subject) : subject; this.retrySubject = RetrySubjectUtils.buildRetrySubject(realSubject, group); this.deadRetrySubject = RetrySubjectUtils.buildDeadRetrySubject(realSubject, group); this.pullBatchSize = PullSubjectsConfig.get().getPullBatchSize(subject); }