Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- getDateCellValue
- AuditingEntityListener
- getEntityGraph
- +9:00
- EmbeddedId
- MSSQL
- @CreateDate
- fractional seconds
- 오블완
- NamedEntityGraph
- 1*1000
- mysql =
- sendFractionalSeconds
- Protecle
- deserializer
- pooled-lo
- 버전 문자열 비교
- createEntityGraph
- 티스토리챌린지
- mysql not equal null
- https
- @EntityListeners
- mysql equal null
- apatch poi
- load order
- yml
- MYSQL
- RootGraph
- 운동해서 광명찾자
- spring boot
Archives
- Today
- Total
Hello
Java Service Bus 사용 본문
728x90
Service Bus는 MS 에서 제공하는 메시지 broker다.
메시지 broker는 송신자의 메시지 프로토콜로부터의 메시지를 수신자의 메시지 프로토콜로 변환하는 중간 컴퓨터 프로그램 모듈이다. 수신자와 송신자 사이에서 중재 역할을 해준다.
service bus는 queue 와 topic 두개의 네임스페이스를 지원한다.
- queue는 수신자와 송신자 1:1로 이루어져 있으며 수신 어플리케이션이 처리 할 수 있을 때 까지 메시지를 저장한다.
- topic은 여러개의 수신자(구독)으로 구성이 가능하며 메시지의 복사본을 수신할 수 있다.
여러개의 어플리케이션에 메시지를 보내기 위해 topic을 사용했다.
topic은 수신하기 위해 SubscriptionClient를 사용한다. 메시지 수신을 위한 코드 작성입니다.
Service Bus 에서 메시지를 수신받아 특정 조건에 맞다면 reload()를 할 수 있도록 작성했다.
메시지 작성 시 label 필드를 사용해 key를 담아 전송한다.
IMessage 객체에서 필요한 값을 꺼내 label이 reload로 작성된 메시지만 reload 메소드를 호출 할 수 있도록 했다.
@Configration
public class SubscriptionConfig{
@Value("${message.connectionstring}")
private String connectString;
@Value("${message.topic}")
private String topic;
@Value("${message.subscription}")
private String subscription;
@Autowrite
private SomeService service;
private ExecutorService executorService = Executors.newCachedThreadPool();
@Bean
SubscriptionClient subscriptionClient(){
//통신을 위한 client 작성
SubscriptionClient client = new SubscriptionClient(
new ConnectionStringBuilder(
connectString,
topic + "/subscriptions/" + subscription
), ReceiveMode.PEEKLOCK);
client.registerMessageHandler(new IMessageHandler() {
@Override
public CompletableFuture<Void> onMessageAsync(IMessage message) {
//메시지 수신 후 동작 code 작성...
if(message.getLabel().equals("reload")){
service.reload();
}
return receiveClient.completeAsync(message.getLockToken());
}
public void notifyException(Throwable throwable, ExceptionPhase exceptionPhase) {
logger.info("exceptionPhase => {}",exceptionPhase);
logger.info("exception => {}",throwable);
throw new RuntimeException(throwable)
}
}, new MessageHandlerOptions(1,false,Duration.ofMinutes(1L)),executorService);
}
}
728x90
'azure' 카테고리의 다른 글
[Azure] Microsoft Entra ID에 blob 권한 부여(storage blob data contributor와 contributor) (0) | 2024.03.19 |
---|---|
Azure Storage Blob sdk V8과 V12 (0) | 2023.10.17 |
Azure DevOps 에서 Azure App Service slot 배포하기 (0) | 2023.10.10 |
Azure Monitor Application Insights 구성 (with JAVA) (0) | 2022.09.15 |
[Paas]Azure App Service 타임존 설정 (0) | 2022.07.21 |