Os consumer groups realizam o balanceamento de carga e o failover durante o consumo de dados de log, permitindo que você se concentre na lógica de negócios. Este tópico fornece exemplos de código para criar, modificar, consultar e excluir consumer groups e seus checkpoints.
Pré-requisitos
O Simple Log Service está ativado.
O Simple Log Service SDK for Python é initialized.
O Simple Log Service SDK for Java está instalado. Para mais informações, consulte Install the Java SDK.
Um project e um Logstore padrão foram criados, e os logs estão sendo coletados. Para mais informações, consulte Manage projects, Create a basic LogStore e Data collection.
Índices devem ser criados antes da consulta de logs. Para mais informações, consulte Create indexes.
Precauções
Neste exemplo, utiliza-se o endpoint público do Simple Log Service na região China (Hangzhou). Endpoint: https://cn-hangzhou.log.aliyuncs.com.
Caso precise acessar o Simple Log Service a partir de outros services da Alibaba Cloud localizados na mesma região do seu project, você pode usar o endpoint interno do Simple Log Service, que é https://cn-hangzhou-intranet.log.aliyuncs.com.
Para obter mais detalhes sobre as regiões e endpoints suportados pelo Simple Log Service, consulte Endpoint.
Criar um consumer group
O código abaixo cria um consumer group chamado ali-test-consumergroup.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.ConsumerGroup;
import com.aliyun.openservices.log.exception.LogException;
public class CreateConsumerGroup {
public static void main(String[] args) throws LogException {
// This example obtains the AccessKey ID and AccessKey secret from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String projectName = "ali-test-project";
// Enter the Logstore name.
String logstoreName = "ali-test-logstore";
// Set the endpoint for Simple Log Service. This example uses the endpoint of the China (Hangzhou) region. Replace it with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
// Set the consumer group name.
String consumerGroupName = "ali-test-consumergroup2";
System.out.println("ready to create consumergroup");
ConsumerGroup consumerGroup = new ConsumerGroup(consumerGroupName, 300, true);
client.CreateConsumerGroup(projectName, logstoreName, consumerGroup);
System.out.println(String.format("create consumergroup %s success", consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
Resultado esperado:
ready to create consumergroup
create consumergroup ali-test-consumergroup success
Modificar um consumer group
O trecho a seguir modifica o consumer group denominado ali-test-consumergroup.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
public class UpdateConsumerGroup {
public static void main(String[] args) throws LogException {
// This example obtains the AccessKey ID and AccessKey secret from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String projectName = "ali-test-project";
// Enter the Logstore name.
String logstoreName = "ali-test-logstore";
// Set the endpoint for Simple Log Service. This example uses the endpoint of the China (Hangzhou) region. Replace it with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "ali-test-consumergroup";
System.out.println("ready to update consumergroup");
// Change the timeout period of the consumer group to 350 seconds.
client.UpdateConsumerGroup(projectName, logstoreName, consumerGroupName, false, 350);
System.out.println(String.format("update consumergroup %s success", consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
Resultado esperado:
ready to update consumergroup
update consumergroup ali-test-consumergroup success
Consultar todos os consumer groups
Este exemplo de código lista todos os consumer groups existentes em um Logstore.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.ConsumerGroup;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.ListConsumerGroupResponse;
public class ListConsumerGroup {
public static void main(String[] args) throws LogException {
// This example obtains the AccessKey ID and AccessKey secret from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String projectName = "ali-test-project";
// Enter the Logstore name.
String logstoreName = "ali-test-logstore";
// Set the endpoint for Simple Log Service. This example uses the endpoint of the China (Hangzhou) region. Replace it with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
System.out.println("ready to list consumergroup");
// Query all consumer groups in the specified Logstore.
ListConsumerGroupResponse response = client.ListConsumerGroup(projectName,logstoreName);
for(ConsumerGroup consumerGroup : response.GetConsumerGroups()){
System.out.println("ConsumerName is : " + consumerGroup.getConsumerGroupName());
}
System.out.println(String.format("list consumergroup from %s success",projectName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
Resultado esperado:
ready to list consumergroup
ConsumerName is : ali-test-consumergroup2
ConsumerName is : ali-test-consumergroup
list consumergroup from ali-test-project success
Excluir um consumer group
A amostra de código a seguir exclui um consumer group específico.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
public class DeleteConsumerGroup {
public static void main(String[] args) throws LogException {
// This example obtains the AccessKey ID and AccessKey secret from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String projectName = "ali-test-project";
// Enter the Logstore name.
String logstoreName = "ali-test-logstore";
// Set the endpoint for Simple Log Service. This example uses the endpoint of the China (Hangzhou) region. Replace it with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "ali-test-consumergroup";
System.out.println("ready to delete consumergroup");
// Delete a specified consumer group.
client.DeleteConsumerGroup(projectName,logstoreName,consumerGroupName);
System.out.println(String.format("delete consumergroup %s success",consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
Resultado esperado:
ready to delete consumergroup
delete consumergroup ali-test-consumergroup success
Obter o checkpoint de um consumer group
O código apresentado recupera o checkpoint de um determinado consumer group.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.GetCheckPointResponse;
public class GetCheckPoint {
public static void main(String[] args) throws LogException {
// This example obtains the AccessKey ID and AccessKey secret from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String projectName = "ali-test-project";
// Enter the Logstore name.
String logstoreName = "ali-test-logstore";
// Set the endpoint for Simple Log Service. This example uses the endpoint of the China (Hangzhou) region. Replace it with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "consumerGroupX";
System.out.println("ready to get consumergroup checkpoint");
// Obtain the checkpoint of a shard in the specified consumer group.
GetCheckPointResponse response1 = client.getCheckpoint(projectName,logstoreName,consumerGroupName,0);
GetCheckPointResponse response2 = client.getCheckpoint(projectName,logstoreName,consumerGroupName,1);
System.out.println("The checkpoint of Shard 0 is : " + response1.getCheckpoint());
System.out.println("The checkpoint of Shard 1 is : " + response2.getCheckpoint());
System.out.println(String.format("get consumergroup %s checkpoint success",consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
Resultado esperado:
ready to get consumergroup checkpoint
The checkpoint of Shard 0 is : ConsumerGroupShardCheckPoint [shard=0, checkPoint=MTY2NzgxMDc0Nzk5MDk5MzAyMg==, updateTime=1668750821709044, consumer=consumer_1]
The checkpoint of Shard 1 is : ConsumerGroupShardCheckPoint [shard=1, checkPoint=MTY2NzgxMDc0Nzk5MTk0NTU0NQ==, updateTime=1668750828790425, consumer=consumer_1]
get consumergroup consumerGroupX checkpoint success
Atualizar o checkpoint de um consumer group
Utilize o código abaixo para atualizar o checkpoint de um consumer group.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.ConsumerGroup;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.ListConsumerGroupResponse;
public class ConsumerGroupUpdateCheckpoint {
public static void main(String[] args) throws LogException {
// This example obtains the AccessKey ID and AccessKey secret from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String projectName = "ali-test-project";
// Enter the Logstore name.
String logstoreName = "ali-test-logstore";
// Set the endpoint for Simple Log Service. This example uses the endpoint of the China (Hangzhou) region. Replace it with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "consumerGroupX";
System.out.println("ready to update checkpoint");
// Query all consumer groups in the specified Logstore.
ListConsumerGroupResponse response = client.ListConsumerGroup(projectName, logstoreName);
for(ConsumerGroup consumerGroup : response.GetConsumerGroups()){
System.out.println("ConsumerName is : " + consumerGroup.getConsumerGroupName());
System.out.println("Consumer order is : " + consumerGroup.isInOrder());
}
// Update the checkpoint of Shard 0. You can call the GetCursor operation to obtain the cursor for a specific time.
client.UpdateCheckPoint(projectName, logstoreName, consumerGroupName, 0, "MTY2NzgxMDc0Nzk5MTAwNjQ3Mg==");
System.out.println(String.format("update checkpoint of %s success", consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
Resultado esperado:
ready to update checkpoint
ConsumerName is : consumerGroupX
Consumer order is : false
ConsumerName is : ali-test-consumergroup2
Consumer order is : true
ConsumerName is : ali-test-consumergroup
Consumer order is : false
update consumergroup checkpoint is:consumerGroupX
update checkpoint of consumerGroupX success
Referências
Além de seu SDK nativo, o SLS também oferece suporte aos SDKs comuns da Alibaba Cloud. Para mais informações, consulte Simple Log Service_SDK Center_Alibaba Cloud OpenAPI Explorer.
-
Operações de API relacionadas: