你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
ServiceBusSenderClient 类
- java.
lang. Object - com.
azure. messaging. servicebus. ServiceBusSenderClient
- com.
实现
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();
方法摘要
方法继承自 java.lang.Object
方法详细信息
cancelScheduledMessage
public void cancelScheduledMessage(long sequenceNumber)
取消计划消息的排队(如果尚未排队)。
Parameters:
cancelScheduledMessages
public void cancelScheduledMessages(Iterable
取消计划消息的排队(如果尚未排队)。
Parameters:
close
public void close()
释放 。ServiceBusSenderClient 如果客户端具有专用连接,则基础连接也会关闭。
commitTransaction
public void commitTransaction(ServiceBusTransactionContext transactionContext)
提交给定 ServiceBusTransactionContext的事务。
Parameters:
createMessageBatch
public ServiceBusMessageBatch createMessageBatch()
创建一个 ServiceBusMessageBatch ,它可容纳传输允许的任意数量的消息。
Returns:
createMessageBatch
public ServiceBusMessageBatch createMessageBatch(CreateMessageBatchOptions options)
ServiceBusMessageBatch创建配置了指定选项的 。
Parameters:
Returns:
createTransaction
public ServiceBusTransactionContext createTransaction()
在服务总线上启动新事务。 ServiceBusTransactionContext应将 传递给需要在此事务中的所有操作。
Returns:
getEntityPath
public String getEntityPath()
获取服务总线资源的名称。
Returns:
getFullyQualifiedNamespace
public String getFullyQualifiedNamespace()
获取完全限定的命名空间。
Returns:
getIdentifier
public String getIdentifier()
获取 实例的 ServiceBusSenderClient标识符。
Returns:
rollbackTransaction
public void rollbackTransaction(ServiceBusTransactionContext transactionContext)
回滚给定的事务及其关联的所有操作。
Parameters:
scheduleMessage
public Long scheduleMessage(ServiceBusMessage message, OffsetDateTime scheduledEnqueueTime)
将计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。
Parameters:
Returns:
scheduleMessage
public Long scheduleMessage(ServiceBusMessage message, OffsetDateTime scheduledEnqueueTime, ServiceBusTransactionContext transactionContext)
将计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。
Parameters:
Returns:
scheduleMessages
public Iterable
将一批计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。
Parameters:
Returns:
scheduleMessages
public Iterable
将一批计划消息发送到此发件人连接到Azure 服务总线实体。 计划的消息将排入队列,并且仅在计划的排队时间提供给接收方。
Parameters:
Returns:
sendMessage
public void sendMessage(ServiceBusMessage message)
将消息发送到服务总线队列或主题。
Parameters:
sendMessage
public void sendMessage(ServiceBusMessage message, ServiceBusTransactionContext transactionContext)
将消息发送到服务总线队列或主题。
Parameters:
sendMessages
public void sendMessages(ServiceBusMessageBatch batch)
将消息批发送到此发件人连接到Azure 服务总线实体。
Parameters:
sendMessages
public void sendMessages(ServiceBusMessageBatch batch, ServiceBusTransactionContext transactionContext)
将消息批发送到此发件人连接到Azure 服务总线实体。
Parameters:
sendMessages
public void sendMessages(Iterable
使用批处理方法将一组 ServiceBusMessage 发送到服务总线队列或主题。 如果消息大小超过单个批的最大大小,将触发异常,并且发送将失败。 默认情况下,消息大小是链接上允许的最大数量。
Parameters:
sendMessages
public void sendMessages(Iterable
使用批处理方法将一组 ServiceBusMessage 发送到服务总线队列或主题。 如果消息大小超过单个批的最大大小,将触发异常,并且发送将失败。 默认情况下,消息大小是链接上允许的最大数量。
Parameters: