xamarin.android - Azure 服务总线和 Xamarin.Android MessageHandler
问题描述
我正在尝试在 Xamarin.Android 移动应用程序上使用 Microsoft.Azure.ServiceBus。我想将设备订阅到特定队列并让它持续监视该队列中的任何消息。
我能够找到一篇将消息发送到队列的文章,但我很难找到订阅队列的方法。使用以下代码似乎不起作用。
QueueClient queueClient = new QueueClient(connectionString, requestQueueName);
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false
};
queueClient.RegisterMessageHandler(ProcessMessageAsync, messageHandlerOptions);
有没有其他人有类似的问题?
感谢 Jlimited
解决方案
您可能想尝试将 设置TransportType
为AmqpWebSockets
。使用默认 TCP 传输时,Android 有时会出现问题。由于您没有注册错误处理程序,因此您不会观察到连接失败的任何异常。
将其集成到当前代码段中的最简单方法是使用ServiceBusConnectionStringBuilder:
var builder = new ServiceBusConnectionStringBuilder(connectionString);
builder.TransportType = TransportType.AmqpWebSockets;
var queueClient = new QueueClient(builder.ToString(), requestQueueName);
如果这是新的开发,没有对旧服务总线库的现有投资,您可能需要考虑使用当前一代Azure.Messaging.ServiceBus。它的ServiceBusProcessor提供了您正在使用的基于推送的模型,支持指定您的消息处理选项并注册错误处理程序,而旧版客户端则没有。
推荐阅读
- ios - Xcode 中的后台模式远程通知是什么
- java - 在Java中将类型转换的数字作为数组中的索引时出错
- typescript - Symfony/Webpack.encore 配置,添加“模块规则”以便在 vue.js 中使用 typescript
- java - 为什么 CONTENT_DISPOSITION 标头被认为是不安全的?
- git - Vscode:如何更改保存的 github 用户名和密码?
- unix - 文件夹结构中某些文件的“zip 名称不匹配”
- reactjs - 如何从表单反应更新堆栈数组
- r - 如何将公式传递给 lm() 而不会出错?
- java - Java getStacktrace 返回错误的行号
- c++ - 在 C++17 中以毫秒为单位获取时间?