/** * Copyright 2016, Xiaomi. * All rights reserved. * Author: yongxing@xiaomi.com */ package com.xiaomi.infra.codelab.talos; import java.util.HashMap; import java.util.Map; import java.util.Properties; import libthrift091.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.xiaomi.infra.galaxy.rpc.thrift.Credential; import com.xiaomi.infra.galaxy.rpc.thrift.Grantee; import com.xiaomi.infra.galaxy.rpc.thrift.UserType; import com.xiaomi.infra.galaxy.talos.admin.TalosAdmin; import com.xiaomi.infra.galaxy.talos.client.TalosClientConfig; import com.xiaomi.infra.galaxy.talos.thrift.CreateTopicRequest; import com.xiaomi.infra.galaxy.talos.thrift.CreateTopicResponse; import com.xiaomi.infra.galaxy.talos.thrift.DeleteTopicRequest; import com.xiaomi.infra.galaxy.talos.thrift.DescribeTopicRequest; import com.xiaomi.infra.galaxy.talos.thrift.Permission; import com.xiaomi.infra.galaxy.talos.thrift.Topic; import com.xiaomi.infra.galaxy.talos.thrift.TopicAttribute; import com.xiaomi.infra.galaxy.talos.thrift.TopicTalosResourceName; public class TalosCloudAdminDemo { private static final Logger LOG = LoggerFactory.getLogger(TalosCloudAdminDemo.class); // authenticate for team private static final String accessKey = "$your_team_accessKey"; private static final String accessSecret = "$your_team_accessSecret"; // another teamId used to be grant permission private static final String anotherTeamId = "$anotherTeamId"; private static final String topicName = "cloudTest"; private static final String orgId = "$your_org_id"; // attention that the topic name to be created is 'orgId/topicName' private static final String cloudTopicName = orgId + "/" + topicName; private static final int partitionNumber = 8; private TopicTalosResourceName resourceName; private Credential credential; private TalosAdmin talosAdmin; public TalosCloudAdminDemo() throws TException { Properties properties = new Properties(); properties.setProperty("galaxy.talos.service.endpoint", "$serviceURI"); TalosClientConfig clientConfig = new TalosClientConfig(properties); // credential credential = new Credential(); credential.setSecretKeyId(accessKey) .setSecretKey(accessSecret) .setType(UserType.DEV_XIAOMI); // init admin talosAdmin = new TalosAdmin(clientConfig, credential); } // create topic specified partitionNumber and topicName public CreateTopicResponse createTopic() throws TException { TopicAttribute topicAttribute = new TopicAttribute() .setPartitionNumber(partitionNumber); // Note: authorization must use 'teamId' and only identifier setting is required Grantee grant = new Grantee().setIdentifier(anotherTeamId); Map<Grantee, Permission> aclMap = new HashMap<Grantee, Permission>(); aclMap.put(grant, Permission.TOPIC_READ_AND_MESSAGE_FULL_CONTROL); // Note: using cloudTopicName instead of original topic name CreateTopicRequest request = new CreateTopicRequest() .setTopicName(cloudTopicName) .setTopicAttribute(topicAttribute) .setAclMap(aclMap); return talosAdmin.createTopic(request); } // get topicTalosResourceName by topicName public TopicTalosResourceName getTopicTalosResourceName() throws TException { Topic topic = talosAdmin.describeTopic(new DescribeTopicRequest(topicName)); resourceName = topic.getTopicInfo().getTopicTalosResourceName(); LOG.info("Topic resourceName is: " + resourceName); return resourceName; } // delete topic by topicTalosResourceName public void deleteTopic() throws TException { DeleteTopicRequest request = new DeleteTopicRequest(resourceName); talosAdmin.deleteTopic(request); LOG.info("Topic success to delete: " + resourceName); } public static void main(String[] args) throws Exception { TalosCloudAdminDemo cloudAdminDemo = new TalosCloudAdminDemo(); cloudAdminDemo.createTopic(); cloudAdminDemo.getTopicTalosResourceName(); // cloudAdminDemo.deleteTopic(); } }