你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

ServiceBusSenderClient 类

  • java.lang.Object
    • com.azure.messaging.servicebus.ServiceBusSenderClient

实现

public final class ServiceBusSenderClient
implements AutoCloseable

负责发送到ServiceBusMessageAzure 服务总线上的队列或主题的同步发送方。

本文档中显示的示例使用名为 DefaultAzureCredential 的凭据对象进行身份验证,该对象适用于大多数方案,包括本地开发和生产环境。 此外,我们建议使用 托管标识 在生产环境中进行身份验证。 可以在 Azure 标识文档中找到有关不同身份验证方式及其相应凭据类型的详细信息。

示例:创建发送方的实例

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net"
 ServiceBusSenderClient sender = new ServiceBusClientBuilder()
     .credential(fullyQualifiedNamespace, credential)
     .sender()
     .queueName(queueName)
     .buildClient();

 sender.sendMessage(new ServiceBusMessage("Foo bar"));

示例:将消息发送到服务总线资源

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net"
 ServiceBusSenderClient sender = new ServiceBusClientBuilder()
     .credential(fullyQualifiedNamespace, credential)
     .sender()
     .queueName(queueName)
     .buildClient();

 List<ServiceBusMessage> messages = Arrays.asList(
     new ServiceBusMessage("test-1"),
     new ServiceBusMessage("test-2"));

 // Creating a batch without options set.
 ServiceBusMessageBatch batch = sender.createMessageBatch();
 for (ServiceBusMessage message : messages) {
     if (batch.tryAddMessage(message)) {
         continue;
     }

     // The batch is full. Send the current batch and create a new one.
     sender.sendMessages(batch);

     batch = sender.createMessageBatch();

     // Add the message we couldn't before.
     if (!batch.tryAddMessage(message)) {
         throw new IllegalArgumentException("Message is too large for an empty batch.");
     }
 }

 // Send the final batch if there are any messages in it.
 if (batch.getCount() > 0) {
     sender.sendMessages(batch);
 }

 // Continue using the sender and finally, dispose of the sender.
 // Clients should be long-lived objects as they require resources
 // and time to establish a connection to the service.
 sender.close();

示例:使用大小受限的消息发送 ServiceBusMessageBatch

List<ServiceBusMessage> telemetryMessages = Arrays.asList(firstMessage, secondMessage, thirdMessage);

 // Setting `setMaximumSizeInBytes` when creating a batch, limits the size of that batch.
 // In this case, all the batches created with these options are limited to 256 bytes.
 CreateMessageBatchOptions options = new CreateMessageBatchOptions()
     .setMaximumSizeInBytes(256);

 ServiceBusMessageBatch currentBatch = sender.createMessageBatch(options);

 // For each telemetry message, we try to add it to the current batch.
 // When the batch is full, send it then create another batch to add more mesages to.
 for (ServiceBusMessage message : telemetryMessages) {
     if (!currentBatch.tryAddMessage(message)) {
         sender.sendMessages(currentBatch);
         currentBatch = sender.createMessageBatch(options);

         // Add the message we couldn't before.
         if (!currentBatch.tryAddMessage(message)) {
             throw new IllegalArgumentException("Message is too large for an empty batch.");
         }
     }
 }

 // Send the final batch if there are any messages in it.
 if (currentBatch.getCount() > 0) {
     sender.sendMessages(currentBatch);
 }

 // Continue using the sender and finally, dispose of the sender.
 // Clients should be long-lived objects as they require resources
 // and time to establish a connection to the service.
 sender.close();

示例:向已启用会话的队列发送消息

以下代码片段演示如何向已启用 服务总线会话的 队列发送消息。 将属性设置为 setMessageId(String messageId) “greetings”会将消息发送到 ID 为“greetings”的服务总线会话。

// 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net"
 ServiceBusSenderClient sender = new ServiceBusClientBuilder()
     .credential(fullyQualifiedNamespace, new DefaultAzureCredentialBuilder().build())
     .sender()
     .queueName(sessionEnabledQueueName)
     .buildClient();

 // Setting sessionId publishes that message to a specific session, in this case, "greeting".
 ServiceBusMessage message = new ServiceBusMessage("Hello world")
     .setSessionId("greetings");

 sender.sendMessage(message);

 // Dispose of the sender.
 sender.close();

方法摘要

修饰符和类型 方法和描述
void cancelScheduledMessage(long sequenceNumber)

取消计划消息的排队(如果尚未排队)。

void cancelScheduledMessages(Iterable<Long> sequenceNumbers)

取消计划消息的排队(如果尚未排队)。

void close()

释放 。ServiceBusSenderClient

void commitTransaction(ServiceBusTransactionContext transactionContext)

提交给定 ServiceBusTransactionContext的事务。

ServiceBusMessageBatch createMessageBatch()

创建一个 ServiceBusMessageBatch ,它可容纳传输允许的任意数量的消息。

ServiceBusMessageBatch createMessageBatch(CreateMessageBatchOptions options)

ServiceBusMessageBatch创建配置了指定选项的 。

ServiceBusTransactionContext createTransaction()

在服务总线上启动新事务。

String getEntityPath()

获取服务总线资源的名称。

String getFullyQualifiedNamespace()

获取完全限定的命名空间。

String getIdentifier()

获取 实例的 ServiceBusSenderClient标识符。

void rollbackTransaction(ServiceBusTransactionContext transactionContext)

回滚给定的事务及其关联的所有操作。

Long scheduleMessage(ServiceBusMessage message, OffsetDateTime scheduledEnqueueTime)

将计划消息发送到此发件人连接到Azure 服务总线实体。

Long scheduleMessage(ServiceBusMessage message, OffsetDateTime scheduledEnqueueTime, ServiceBusTransactionContext transactionContext)

将计划消息发送到此发件人连接到Azure 服务总线实体。

Iterable<Long> scheduleMessages(Iterable<ServiceBusMessage> messages, OffsetDateTime scheduledEnqueueTime)

将一批计划消息发送到此发件人连接到Azure 服务总线实体。

Iterable<Long> scheduleMessages(Iterable<ServiceBusMessage> messages, OffsetDateTime scheduledEnqueueTime, ServiceBusTransactionContext transactionContext)

将一批计划消息发送到此发件人连接到Azure 服务总线实体。

void sendMessage(ServiceBusMessage message)

将消息发送到服务总线队列或主题。

void sendMessage(ServiceBusMessage message, ServiceBusTransactionContext transactionContext)

将消息发送到服务总线队列或主题。

void sendMessages(ServiceBusMessageBatch batch)

将消息批发送到此发件人连接到Azure 服务总线实体。

void sendMessages(ServiceBusMessageBatch batch, ServiceBusTransactionContext transactionContext)

将消息批发送到此发件人连接到Azure 服务总线实体。

void sendMessages(Iterable<ServiceBusMessage> messages)

使用批处理方法将一组 ServiceBusMessage 发送到服务总线队列或主题。

void sendMessages(Iterable<ServiceBusMessage> messages, ServiceBusTransactionContext transactionContext)

使用批处理方法将一组 ServiceBusMessage 发送到服务总线队列或主题。

方法继承自 java.lang.Object

方法详细信息

cancelScheduledMessage

public void cancelScheduledMessage(long sequenceNumber)

取消计划消息的排队(如果尚未排队)。

Parameters:

sequenceNumber - 要取消的消息的序列号。

cancelScheduledMessages

public void cancelScheduledMessages(Iterable sequenceNumbers)

取消计划消息的排队(如果尚未排队)。

Parameters:

sequenceNumbers - 要取消的消息的序列号。

close

public void close()

释放 。ServiceBusSenderClient 如果客户端具有专用连接,则基础连接也会关闭。

commitTransaction

public void commitTransaction(ServiceBusTransactionContext transactionContext)

提交给定 ServiceBusTransactionContext的事务。

Parameters:

transactionContext - 要提交。

createMessageBatch

public ServiceBusMessageBatch createMessageBatch()

创建一个 ServiceBusMessageBatch ,它可容纳传输允许的任意数量的消息。

Returns:

一个 ServiceBusMessageBatch ,它可以容纳传输允许的任意数量的消息。

createMessageBatch

public ServiceBusMessageBatch createMessageBatch(CreateMessageBatchOptions options)

ServiceBusMessageBatch创建配置了指定选项的 。

Parameters:

options - 一组用于配置 的选项 ServiceBusMessageBatch

Returns:

使用给定选项配置的新 ServiceBusMessageBatch

createTransaction

public ServiceBusTransactionContext createTransaction()

在服务总线上启动新事务。 ServiceBusTransactionContext应将 传递给需要在此事务中的所有操作。

Returns:

getEntityPath

public String getEntityPath()

获取服务总线资源的名称。

Returns:

服务总线资源的名称。

getFullyQualifiedNamespace

public String getFullyQualifiedNamespace()

获取完全限定的命名空间。

Returns:

完全限定的命名空间。

getIdentifier

public String getIdentifier()

获取 实例的 ServiceBusSenderClient标识符。

Returns:

可以标识 实例的 ServiceBusSenderClient标识符。

rollbackTransaction

public void rollbackTransaction(ServiceBusTransactionContext transactionContext)

回滚给定的事务及其关联的所有操作。

Parameters:

transactionContext - 要回滚的事务。

scheduleMessage

public Long scheduleMessage(ServiceBusMessage message, OffsetDateTime scheduledEnqueueTime)

将计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。

Parameters:

message - 要发送到服务总线队列或主题的消息。
scheduledEnqueueTime - 消息应出现在服务总线队列或主题中的日期时间。

Returns:

可用于取消消息计划的计划消息的序列号。

scheduleMessage

public Long scheduleMessage(ServiceBusMessage message, OffsetDateTime scheduledEnqueueTime, ServiceBusTransactionContext transactionContext)

将计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。

Parameters:

message - 要发送到服务总线队列或主题的消息。
scheduledEnqueueTime - 消息应出现在服务总线队列或主题中的日期时间。
transactionContext - 在发送到服务总线之前对消息进行设置。

Returns:

可用于取消消息计划的计划消息的序列号。

scheduleMessages

public Iterable scheduleMessages(Iterable messages, OffsetDateTime scheduledEnqueueTime)

将一批计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。

Parameters:

messages - 要发送到服务总线队列或主题的消息。
scheduledEnqueueTime - 消息应出现在服务总线队列或主题中的时刻。

Returns:

可用于取消消息的计划消息的序列号。

scheduleMessages

public Iterable scheduleMessages(Iterable messages, OffsetDateTime scheduledEnqueueTime, ServiceBusTransactionContext transactionContext)

将一批计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。

Parameters:

messages - 要发送到服务总线队列或主题的消息。
scheduledEnqueueTime - 消息应出现在服务总线队列或主题中的时刻。
transactionContext - 要与操作关联的事务。

Returns:

可用于取消消息的计划消息的序列号。

sendMessage

public void sendMessage(ServiceBusMessage message)

将消息发送到服务总线队列或主题。

Parameters:

message - 要发送到服务总线队列或主题的消息。

sendMessage

public void sendMessage(ServiceBusMessage message, ServiceBusTransactionContext transactionContext)

将消息发送到服务总线队列或主题。

Parameters:

message - 要发送到服务总线队列或主题的消息。
transactionContext - 在发送到服务总线之前对消息进行设置。

sendMessages

public void sendMessages(ServiceBusMessageBatch batch)

将消息批发送到此发件人连接到Azure 服务总线实体。

Parameters:

batch - 允许客户端发送一批消息的最大允许大小的消息数。

sendMessages

public void sendMessages(ServiceBusMessageBatch batch, ServiceBusTransactionContext transactionContext)

将消息批发送到此发件人连接到Azure 服务总线实体。

Parameters:

batch - 允许客户端发送一批消息的最大允许大小的消息数。
transactionContext - 在发送到服务总线之前对消息进行设置。

sendMessages

public void sendMessages(Iterable messages)

使用批处理方法将一组 ServiceBusMessage 发送到服务总线队列或主题。 如果消息大小超过单个批的最大大小,将触发异常,并且发送将失败。 默认情况下,消息大小是链接上允许的最大数量。

Parameters:

messages - 要发送到服务总线队列或主题的消息。

sendMessages

public void sendMessages(Iterable messages, ServiceBusTransactionContext transactionContext)

使用批处理方法将一组 ServiceBusMessage 发送到服务总线队列或主题。 如果消息大小超过单个批的最大大小,将触发异常,并且发送将失败。 默认情况下,消息大小是链接上允许的最大数量。

Parameters:

messages - 要发送到服务总线队列或主题的消息。
transactionContext - 在发送到服务总线之前对消息进行设置。

适用于