storm 에서 볼트 가 emit 와 같은 유형의 메 시 지 를 여러 번 보 냅 니 다.
3040 단어 빅 데이터
여러 개의 다른 메 시 지 를 보 낼 수 있 습 니 다. 예 를 들 어:
collector.emit("update-delivered-status",new Values(emailDeliverStatus));
collector.emit("save-request",new Values(udsn));
같은 유형의 메 시 지 를 여러 가지 다른 내용 으로 보 낼 수도 있다.
for (int i = 0; i < emailParamVo.getReceiverNum(); i++)
{
EmailDeliverStatus emailDeliverStatus = new EmailDeliverStatus();
emailDeliverStatus.setCategoryId(emailParamVo.getCategoryId());
emailDeliverStatus.setUpdateTime(emailParamVo.getUpdateTime());
emailDeliverStatus.setStatus(emailParamVo.getEventType());
emailDeliverStatus.setUserId(emailParamVo.getUserId());
emailDeliverStatus.setMessageDetail(emailParamVo.getMessageDetail());
StringBuilder receiverBuilder = new StringBuilder(emailParamVo.getReceivers());
receiverBuilder = receiverBuilder.deleteCharAt(0);
receiverBuilder = receiverBuilder.deleteCharAt(receiverBuilder.length()-1);
String[] receivers = receiverBuilder.toString().split(" ");
String receiver = receivers[i];
emailDeliverStatus.setEmailId(emailParamVo.getEmailIdPre() + i + "$" + receiver);
emailDeliverStatus.setReceiver(receiver);
collector.emit("update-delivered-status",new Values(emailDeliverStatus));
}
위의 쓰기 방법 은 문제 가 없습니다. for 순환 에서 보 내 는 대상 은 매번 새로운 인 스 턴 스 이기 때 문 입 니 다. 그러나 인 스 턴 스 를 만 드 는 동작 을 밖으로 내 놓 으 면 다음 과 같 습 니 다.
EmailDeliverStatus emailDeliverStatus = new EmailDeliverStatus();
emailDeliverStatus.setCategoryId(emailParamVo.getCategoryId());
emailDeliverStatus.setUpdateTime(emailParamVo.getUpdateTime());
emailDeliverStatus.setStatus(emailParamVo.getEventType());
emailDeliverStatus.setUserId(emailParamVo.getUserId());
emailDeliverStatus.setMessageDetail(emailParamVo.getMessageDetail());
for (int i = 0; i < emailParamVo.getReceiverNum(); i++)
{
StringBuilder receiverBuilder = new StringBuilder(emailParamVo.getReceivers());
receiverBuilder = receiverBuilder.deleteCharAt(0);
receiverBuilder = receiverBuilder.deleteCharAt(receiverBuilder.length()-1);
String[] receivers = receiverBuilder.toString().split(" ");
String receiver = receivers[i];
emailDeliverStatus.setEmailId(emailParamVo.getEmailIdPre() + i + "$" + receiver);
emailDeliverStatus.setReceiver(receiver);
collector.emit("update-delivered-status",new Values(emailDeliverStatus));
}
이렇게 하면 문제 가 있 습 니 다. 논리 적 으로 저 희 는 emit 에 여러 개의 서로 다른 emailDeliverStatus 대상 의 소식 을 전하 고 싶 습 니 다. 그러나 실제 적 으로 이렇게 하면 안 됩 니 다. storm 의 emit 작업 은 바로 실행 되 는 것 이 아니 기 때 문 입 니 다.
위의 코드 는 emit 호출 을 가정 한 후에 storm 에서 바로 메 시 지 를 보 내 는 것 입 니 다.위 에 쓰 여 있 는 대로 메 시 지 를 받 은 bolt 가 받 은 for 순환 의 여러 메 시 지 는 마지막 메시지 가 여러 번 반복 되 는 것 을 발견 할 수 있 습 니 다.
storm 은 emit 를 즉시 실행 하 는 것 이 아니 라 이 bolt 에서 실 행 된 고정 시간 에 emit 를 실행 하기 때문에 emailDeliverStatus 인 스 턴 스 의 초기 화 는 for 순환 의 밖 에 두 어야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spark 의 2: 원리 소개Google Map/Reduce 를 바탕 으로 이 루어 진 Hadoop 은 개발 자 에 게 map, reduce 원 어 를 제공 하여 병렬 일괄 처리 프로그램 을 매우 간단 하고 아름 답 게 만 들 었 습 니 다.S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.