2

我有一个 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);
}

我正在传递相同的连接字符串和队列名称,但仍然不起作用。如果我在我的本地机器上运行函数,那么它会被触发但有错误错误图像

4

1 回答 1

1

正如官方文档建议的那样,

函数需要一个 base64 编码的字符串。对编码类型的任何调整(为了将数据准备为 base64 编码字符串)都需要在调用服务中实现。

更新发件人代码以发送 base64 编码的消息。

String encodedMsg = Base64.getEncoder().encodeToString(message.getBytes())
queueClient.sendMessage(encodedMsg);
于 2020-11-27T08:59:15.703 回答