跳到主要内容

使用Python API创建队列

可以使用 Python API 和 PersistentMessageReceiverBuilder 在 Solace 事件代理上预配队列。这些队列可以是持久的或非持久的(请参阅我们的博客文章了解 Solace 端点:持久与非持久),并且直到您在 PersistentMessageReceiver 上调用 start() 时,才会在事件代理上预配这些队列。

创建非持久队列

要创建一个非持久队列,请在构建 PersistentMessageReceiver 时将 Queue.non_durable_exclusive_queue("queue-name") 传递给 build() 函数的参数。当您在 PersistentMessageReceiver 上调用 start() 函数时,队列会在代理上预配。创建该队列的客户端应用程序从事件代理断开连接后,该非持久队列将被删除。以下示例展示了如何创建一个非持久队列:

# 定义主题订阅
topics_sub = [TopicSubscription.of("solace/sample/1")]

# 队列名称。这假设代理上已经存在一个具有正确主题订阅的持久队列
non_durable_exclusive_queue = Queue.non_durable_exclusive_queue("sample-queue")

# 创建一个 PersistentMessageReceiver Builder,允许您创建一个 PersistentMessageReceiver 并启动它
persistent_receiver = messaging_service.create_persistent_message_receiver_builder() \
.build(non_durable_exclusive_queue)

# 同步启动配置好的 PersistentMessageReceiver。在调用此函数之前,接收器被视为非工作状态
persistent_receiver.start()

# 为您的接收器添加任何额外的订阅
persistent_receiver.add_subscription(topics_sub)

如果客户端意外断开连接(例如,由于网络问题),队列将在 60 秒后被删除。这种行为允许自动重连逻辑在队列消失之前将客户端重新连接到队列。

创建持久队列

创建持久队列时,需要在构建 PersistentMessageReceiver 时调用 with_missing_resources_creation_strategy() 函数。MissingResourcesCreationStrategy 接收一个参数,该参数有两个可能的值:

  • MissingResourcesCreationStrategy.DO_NOT_CREATE — 默认值,禁用创建缺失资源的任何尝试。

  • MissingResourcesCreationStrategy.CREATE_ON_START — 只要客户端具有足够的权限(否则会抛出异常),就会创建 build() 函数中提供的队列。

当您在 PersistentMessageReceiver 上调用 start() 函数时,队列会在代理上预配。

对于 PubSub+ Python API,持久端点预配是通过缺失资源创建策略实现的,这意味着您无法通过 API 取消预配端点。

以下示例展示了如何使用缺失资源创建策略创建持久队列:

# 定义主题订阅
topics_sub = [TopicSubscription.of("solace/sample/1")]

# 队列名称
durable_exclusive_queue = Queue.durable_exclusive_queue("sample-queue")

# 创建一个 PersistentMessageReceiver Builder,允许您创建一个 PersistentMessageReceiver 并启动它
persistent_receiver = messaging_service.create_persistent_message_receiver_builder() \
.with_missing_resources_creation_strategy(MissingResourcesCreationStrategy.CREATE_ON_START)\
.build(durable_exclusive_queue)

# 同步启动配置好的 PersistentMessageReceiver。在调用此函数之前,接收器被视为非工作状态
persistent_receiver.start()

# 为您的接收器添加任何额外的订阅
persistent_receiver.add_subscription(topics_sub)

可以为 PubSub+ 事件代理配置队列模板,这允许您使用 Python API 创建队列时设置自定义属性。使用缺失资源创建策略时,只有当您创建的队列名称与模板的 name-filter 匹配时,队列模板才会覆盖提供的队列属性。有关队列模板及其配置方法的信息,请参阅配置队列模板。

您无法使用 PubSub+ Python API 取消使用缺失资源创建策略预配的队列。请使用 SEMP 或 SolacePubSub+ 事件代理命令行界面(CLI)来取消预配这些队列。