我有一个HTTP触发器Azure函数。此函数将一些数据保存到数据库中,返回HttpResponseData并输出Azure Service Bus消息。
这种情况是,如果函数由于任何原因(例如,错误配置的服务总线连接字符串)无法将消息发送到服务总线,则数据已经持久化,但服务总线中没有消息。
如何让Azure函数在未能向服务总线发送消息或回滚整个事务时重试?
这是我的函数代码,.NET 6 Isolated。
[Function("TestFunction")]
public async Task<TestFunctionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestData req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
// This is to persist some data to the database
var result = await _someService.SubmitSomeData(someData);
// This is to create an HttpResponseData object
var response = await req.CreateResponseAsync(result);
return new TestFunctionResult
{
OutputMessage = new TestTopic("First Last", "My Company"),
HttpResponse = response
};
}
这是TestFunctionResult的定义
public class TestFunctionResult
{
[ServiceBusOutput("TestTopic", Connection = "ServiceBus", EntityType = ServiceBusEntityType.Topic)]
public TestTopic OutputMessage { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
1条答案
按热度按时间jckbn6z71#
我使用了您的代码来重现问题,它对我有效。
为了在无法向服务总线发送消息时重试,我按照documentation在
host.json
文件中添加了以下代码host.json文件-
function.cs文件-
local.settings.json文件-
输出-
入口-之前-
之后-