azure function triggered by service bus queue

wangki·2025년 10월 13일

Azure

목록 보기
1/2

개요

service bus를 트리거로 하는 azure function을 로컬에서 테스트해볼 예정이다.

내용

visual studio로 azure function 프로젝트를 설정했다.

using System;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace ServiceBusTriggerTest;

public class ServiceBusFunction
{
    private readonly ILogger<ServiceBusFunction> _logger;

    public ServiceBusFunction(ILogger<ServiceBusFunction> logger)
    {
        _logger = logger;
    }

    [Function(nameof(ServiceBusFunction))]
    public async Task Run(
        [ServiceBusTrigger("myqueue", Connection = "")]
        ServiceBusReceivedMessage message,
        ServiceBusMessageActions messageActions)
    {
        _logger.LogInformation("Message ID: {id}", message.MessageId);
        _logger.LogInformation("Message Body: {body}", message.Body);
        _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);

        // Complete the message
        await messageActions.CompleteMessageAsync(message);
    }
}

위 코드처럼 세팅이 된다. Azure Function은 그냥 프레임워크인 것 같다. 프로젝트를 보면 자동으로 local.settings.json 파일이 만들어진다.

서비스 버스 -> 큐 -> 설정 -> 공유 액세스 정책에서 기본 연결 문자열을 복사해서
local.settings.json에 넣어주면 된다.

큐이름과 설정한 키값을 넣어주면 자동으로 찾아준다.

로컬에서 실행을 시키면 끝이다. 아주 간단하다.

Service Bus 탐색기에서 메시지를 보낼 수 있다. 메시지를 보내게 되면 실행해놓은 azure function이 트리거 되어서 메시지를 받을 것이다.

피킹 모드와 수신 모드가 있다.
https://www.youtube.com/watch?v=-pRJ5L2rdHg
https://learn.microsoft.com/ko-kr/azure/service-bus-messaging/explorer
위 사이트를 참고하면 된다.

간단히 설명하면, 피킹 모드는 메시지를 소비하지 않고 확인하는 거라고 보면 된다. 큐에서 지워지지 않는다.

서비스 버스 트리거는 기본적으로 PeekLock 모드이다.

await messageActions.CompleteMessageAsync(message);

위 함수를 명시적으로 호출해주지 않아도 자동으로 완료 메시지를 보내게 되어있다.

위 사진 처럼 AutoCompleteMessages를 false로 처리하고 메시지를 보냈더니 정상으로 트리거 되어 메시지는 수신이 되는데


큐에 메시지가 쌓이는 것을 확인할 수 있었다.

추가로 throw new Exception("재시도를 위해 처리 실패를 강제합니다.");을 마지막에 넣어줬더니, 재시도를 반복하더니

배달 못한 편지로 옮겨지는 것을 확인할 수 있다.

참고

https://learn.microsoft.com/ko-kr/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=python-v2%2Cisolated-process%2Cnodejs-v4%2Cextensionv5&pivots=programming-language-csharp

결론

서비스 버스를 트리거로 하여 Azure Function을 만들어봤는데 왜 C#으로 해야 하는지 알았다. 호환성이 좋고 개발하기 편한 것 같다. 그리고 문서화가 잘되어 있어서 편했다.

0개의 댓글