Azure 队列触发器不适用于 Java
Posted
技术标签:
【中文标题】Azure 队列触发器不适用于 Java【英文标题】:Azure Queue trigger not working with Java 【发布时间】:2021-03-10 00:18:07 【问题描述】:我有一个 Spring Boot 应用程序,它将在 azure Queue 上发布消息。我还有一个用 Java 编写的 azure queueTrigger 函数,它将侦听 Spring Boot 应用程序已向其发布消息的同一队列。 queueTrigger 函数无法检测到队列上发布的消息。
这是我的发布商代码
public static void addQueueMessage(String connectStr, String queueName, String message)
try
// Instantiate a QueueClient which will be
// used to create and manipulate the queue
QueueClient queueClient = new QueueClientBuilder()
.connectionString(connectStr)
.queueName(queueName)
.buildClient();
System.out.println("Adding message to the queue: " + message);
// Add a message to the queue
queueClient.sendMessage(message);
catch (QueueStorageException e)
// Output the exception message and stack trace
System.out.println(e.getMessage());
e.printStackTrace();
这是我的 queueTrigger 函数应用代码
@FunctionName("queueprocessor")
public void run(
@QueueTrigger(name = "message",
queueName = "queuetest",
connection = "AzureWebJobsStorage") String message,
final ExecutionContext context
)
context.getLogger().info(message);
我正在传递相同的连接字符串和队列名称,但仍然无法正常工作。如果我在本地机器上运行函数,那么它会被触发但出现错误 error image
【问题讨论】:
【参考方案1】:正如official doc 建议的那样,
函数需要一个 base64 编码的字符串。对编码类型的任何调整(为了将数据准备为 base64 编码字符串)都需要在调用服务中实现。
更新发件人代码以发送 base64 编码消息。
String encodedMsg = Base64.getEncoder().encodeToString(message.getBytes())
queueClient.sendMessage(encodedMsg);
【讨论】:
感谢它在本地 Windows 机器上工作,但是当我部署 queueTrigger 函数以使其不会被触发时 它可能不会被触发的唯一原因是 Azure 中的函数应用程序中的“应用程序设置”应该在函数代码中使用存储连接字符串。还要确保您在那里有队列,并且没有其他应用程序(如本地调试器)正在侦听相同的队列。 我检查了,连接良好,没有其他监听器,部署时仍然无法正常工作,但在本地机器上工作正常 您在 App Isights 日志中看到了什么? 我不确定 Isights 是如何工作的,因为我是 azure 平台的新手以上是关于Azure 队列触发器不适用于 Java的主要内容,如果未能解决你的问题,请参考以下文章
Azure Functions:如何在 Azure 存储队列的绑定表达式中使用 POCO?