Apache Pulsar通过Java/Scala API操作tenant、namespace、topic

1. 添加pom.xml依赖

        <dependency>
            <groupId>org.apache.pulsar</groupId>
            <artifactId>pulsar-client-all</artifactId>
            <version>2.9.1</version>
        </dependency>

2. tenant租户的Java/Scala API

示例如下

import org.apache.pulsar.client.admin.PulsarAdmin
import org.apache.pulsar.common.policies.data.TenantInfo
import scala.collection.convert.ImplicitConversions.`list asScalaBuffer`
import scala.collection.convert.ImplicitConversions.`set AsJavaSet`

object tenantTest {

  def main(args: Array[String]): Unit = {
    // ===============创建Pulsar的Admin管理对象===================
    val serviceHttpUrl = "http://192.168.23.111:8086,192.168.23.112:8086,192.168.23.113:8086"
    val pulsarAdmin:PulsarAdmin = PulsarAdmin.builder().serviceHttpUrl(serviceHttpUrl).build()

    val tenantName = "my-tenant"
    // ===============基于Pulsar的Admin对象进行相关的操作================
    // 创建租户
    val allowedClusters = scala.collection.immutable.Set("pulsar-cluster")
    val config:TenantInfo = TenantInfo.builder().allowedClusters(allowedClusters).build()
    pulsarAdmin.tenants().createTenant(tenantName, config)

    // 查看当前有那些租户
    val tenants:Seq[String] = pulsarAdmin.tenants().getTenants().toSeq
    tenants.foreach(println)

    // 删除租户操作
    pulsarAdmin.tenants().deleteTenant(tenantName)

    // =========================关闭管理对象=============================
    pulsarAdmin.close()
  }

}

程序输出如下

my-tenant
public
pulsar

3. namespace命令空间的Java/Scala API

示例如下

import org.apache.pulsar.client.admin.PulsarAdmin
import scala.collection.convert.ImplicitConversions.`list asScalaBuffer`

object namespaceTest {

  def main(args: Array[String]): Unit = {

    // ==========================创建Pulsar的Admin管理对象================
    val serviceHttpUrl = "http://192.168.23.111:8086,192.168.23.112:8086,192.168.23.113:8086"
    val pulsarAdmin:PulsarAdmin = PulsarAdmin.builder().serviceHttpUrl(serviceHttpUrl).build()

    val tenantName = "my-tenant"
    val namespaceName = s"${tenantName}/my-ns"
    // ===============基于Pulsar的Admin对象进行相关的操作================
    // 创建名称空间
    pulsarAdmin.namespaces().createNamespace(namespaceName)

    // 获取租户下的名称空间列表
    val namespaces:Seq[String] = pulsarAdmin.namespaces().getNamespaces(tenantName).toSeq
    namespaces.foreach(println)

    // 删除名称空间
    pulsarAdmin.namespaces().deleteNamespace(namespaceName)

    // ====================关闭admin对象========================
    pulsarAdmin.close()
  }

}

程序输出如下

my-tenant/my-ns

4. topic的Java/Scala API

示例如下

import org.apache.pulsar.client.admin.PulsarAdmin
import scala.collection.convert.ImplicitConversions.`list asScalaBuffer`

object topicTest {

  def main(args: Array[String]): Unit = {

    // ===========================创建Pulsar的Admin管理对象====================
    val serviceHttpUrl = "http://192.168.23.111:8086,192.168.23.112:8086,192.168.23.113:8086"
    val pulsarAdmin:PulsarAdmin = PulsarAdmin.builder().serviceHttpUrl(serviceHttpUrl).build()

    val namespaceName = "my-tenant/my-ns"
    val nonPartitionedTopicName = "non-persistent://my-tenant/my-ns/my-non-partitioned-topic"
    val partitionedTopicName = "persistent://my-tenant/my-ns/my-partitioned-topic"
    // ============================执行相关的操作=========================
    // 创建无分区的topic
    pulsarAdmin.topics().createNonPartitionedTopic(nonPartitionedTopicName)

    // 创建有分区的topic
    pulsarAdmin.topics().createPartitionedTopic(partitionedTopicName,3)

    // 修改有分区的Topic的分区数量
    pulsarAdmin.topics().updatePartitionedTopic(partitionedTopicName,6)

    // 查询当前有那些topic。如果一个topic有3个分区,则返回3个带-partition-N后缀的topic
    val topicList:Seq[String] = pulsarAdmin.topics().getList(namespaceName).toSeq
    topicList.foreach(println)
    // 查询当前有分区的topic列表
    val partitionedTopicList:Seq[String] = pulsarAdmin.topics().getPartitionedTopicList(namespaceName).toSeq
    partitionedTopicList.foreach(println)


    // 查询有分区的Topic,有多少个分区
    val partitions:Int = pulsarAdmin.topics().getPartitionedTopicMetadata(partitionedTopicName).partitions
    println(partitions)

    // 删除无分区的Topic
    pulsarAdmin.topics().delete(nonPartitionedTopicName)
    // 删除有分区的Topic
    pulsarAdmin.topics().deletePartitionedTopic(partitionedTopicName)


    // =========================关闭admin对象=============================
    pulsarAdmin.close()

  }

}

程序输出如下

persistent://my-tenant/my-ns/my-partitioned-topic-partition-0
persistent://my-tenant/my-ns/my-partitioned-topic-partition-1
persistent://my-tenant/my-ns/my-partitioned-topic-partition-4
persistent://my-tenant/my-ns/my-partitioned-topic-partition-5
persistent://my-tenant/my-ns/my-partitioned-topic-partition-2
persistent://my-tenant/my-ns/my-partitioned-topic-partition-3
non-persistent://my-tenant/my-ns/my-non-partitioned-topic
persistent://my-tenant/my-ns/my-partitioned-topic
6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值