Este tópico descreve as notas de versão do SDK de cliente TCP para Java 2.x.x.Final, incluindo observações de uso, informações de versão, requisitos de ambiente e alterações de recursos.
Observações de uso
Atualize o SDK de cliente TCP para Java para a versão V2.x.x.Final apenas nas seguintes regiões: China (Hangzhou), China (Qingdao), China (Pequim), China (Zhangjiakou), China (Hohhot), China (Shenzhen), China (Chengdu), China (Hong Kong), Alemanha (Frankfurt) e Indonésia (Jacarta). Não atualize o SDK de cliente TCP para Java para a versão V2.x.x.Final em outras regiões. Caso contrário, você não conseguirá usar o SDK para se conectar ao ApsaraMQ for RocketMQ.
-
Use o SDK de cliente TCP para Java 2.x.x.Final para acessar o ApsaraMQ for RocketMQ exclusivamente em virtual private clouds (VPCs).
Se você usa uma instância existente do ApsaraMQ for RocketMQ com acesso pela rede clássica, não atualize o SDK de cliente TCP para Java para a versão 2.x.x.Final. A atualização impede o acesso à instância do ApsaraMQ for RocketMQ.
-
Use o SDK de cliente TCP para Java 2.x.x.Final para acessar apenas instâncias que contêm namespaces. Se a sua instância não tiver um namespace, não atualize o SDK de cliente TCP para Java para a versão 2.x.x.Final.
Todas as instâncias do ApsaraMQ for RocketMQ 5.x incluem namespaces por padrão. Para instâncias do ApsaraMQ for RocketMQ 4.x, verifique a existência de um namespace na seção Basic Information da página Instance Details no console do ApsaraMQ for RocketMQ.
Informações da versão
|
Data de lançamento |
Versão |
Link para baixe |
|
23/02/2023 |
2.0.5.Final |
|
|
17/08/2022 |
2.0.3.Final |
|
|
16/06/2022 |
2.0.2.Final |
|
|
29/11/2021 |
2.0.1.Final |
|
|
18/10/2021 |
2.0.0.Final |
Requisitos de ambiente
Para usar o SDK para Java V2.x.x, utilize um Java Development Kit (JDK) compatível com Java 8 ou superior.
Alterações de recursos na V2.0.5
Recurso otimizado
Adicionado suporte a logs assíncronos.
Problemas corrigidos
Corrigida a impossibilidade de especificar o tempo de espera para consumo em lote.
Corrigidas vulnerabilidades de segurança específicas.
Alterações de recursos na V2.0.3
Fixed issue
Corrigida a limitação que impedia o aumento do número de threads em um pool de threads para valores superiores a 32 em versões mais recentes do JDK.
Alterações de recursos na V2.0.2
Fixed issue
Corrigido um possível deadlock durante o envio de mensagens.
Alterações de recursos na V2.0.1
Message trace
Os resultados da consulta de rastreamento agora retornam mais dados.
Alterações de recursos na V2.0.0
Ordered message
O valor padrão do parâmetro MaxReconsumeTimes mudou de Integer.MAX para 16. Esse parâmetro define o número máximo de tentativas para mensagens ordenadas. Se o consumidor ainda falhar após atingir esse limite, a mensagem será enviada para a fila de mensagens mortas (dead-letter queue). Altere o valor de MaxReconsumeTimes para modificar o limite de retentativas.
Transactional message
Quando o produtor envia mensagens, o sistema lança uma exceção se a classe LocalTransactionExecutor for nula. Versões anteriores não geravam exceção nesse cenário.
Broadcasting consumption
No modo de consumo broadcasting, chame a operação offsetStore para definir o offset inicial do consumidor. Sem essa especificação, o consumo começa a partir do offset mais recente, mantendo a compatibilidade com versões anteriores.
Código de exemplo:
public class BroadcastingConsumerExample {
public static void main(String[] args) throws InterruptedException {
Properties properties = new Properties();
properties.put(PropertyKeyConst.GROUP_ID, "MyGroupId");
properties.put(PropertyKeyConst.AccessKey, "MyAccessKey");
properties.put(PropertyKeyConst.SecretKey, "MySecretKey");
// The TCP endpoint. You can obtain the endpoint in the TCP Endpoint section of the Instance Details page in the ApsaraMQ for RocketMQ console.
properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXXX");
// You can obtain the consumer offset by calling the offsetStore operations only in broadcasting consumption mode.
properties.put(PropertyKeyConst.MessageModel, MessageModel.BROADCASTING);
Consumer consumer = ONSFactory.createConsumer(properties);
// The frequency of calls for the AbstractOffsetStore method. The value 1 specifies that the system calls the AbstractOffsetStore method every second to set a persistent offset.
OffsetStore offsetStore = new AbstractOffsetStore(1) {
@Override
public Map<TopicPartition, Long> loadOffset() {
// The logic that is used to obtain the offset from an external storage system.
}
@Override
public void persistOffset(Map<TopicPartition, Long> offsetTable) {
// The logic that is used to persist the offset to an external storage system.
}
};
offsetStore.start();
consumer.setOffsetStore(offsetStore);
consumer.subscribe("testBroadcastingTopic", "TagA", new MessageListener() {
@Override
public Action consume(Message message, ConsumeContext context) {
// The logic that is used to consume messages.
return Action.CommitMessage;
}
});
consumer.start();
Thread.sleep(100000);
consumer.shutdown();
offsetStore.shutdown();
}
}
Consumption in Push mode
Não há suporte para consumo em lote de mensagens normais.
O sistema lança uma exceção durante a criação do consumidor se o número de threads de consumo estiver fora do intervalo válido de 1 a 1.000.
-
Adicionado recurso de limitação de consumo. Configure essa funcionalidade para restringir as taxas de consumo de mensagens e evitar exceções na aplicação causadas por picos repentinos nos clientes consumidores. O código abaixo demonstra como definir uma taxa personalizada.
NotaA limitação de consumo não se aplica às retentativas de mensagens ordenadas.
public class RateLimitConsumerExample { public static void main(String[] args) throws InterruptedException { Properties properties = new Properties(); properties.put(PropertyKeyConst.GROUP_ID, "MyGroupId"); properties.put(PropertyKeyConst.AccessKey, "MyAccessKey"); properties.put(PropertyKeyConst.SecretKey, "MySecretKey"); // The TCP endpoint. You can obtain the endpoint in the TCP Endpoint section of the Instance Details page in the ApsaraMQ for RocketMQ console. properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX"); Consumer consumer = ONSFactory.createConsumer(properties); // Specify the message consumption rate in testTopicA. In this example, the consumer client can consume only 10 messages per second. consumer.rateLimit("testTopicA", 10); consumer.subscribe("testTopic", "TagA", new MessageListener() { @Override public Action consume(Message message, ConsumeContext context) { // The logic that is used to consume messages. return Action.CommitMessage; } }); consumer.start(); Thread.sleep(100000); consumer.shutdown(); } }
Consumption in Pull mode
Não há suporte para consumo no modo Pull.
Log configuration
O caminho padrão de log mudou de ~/logs/ons.log para ~/logs/ons/ons-client.log.
Os níveis de log agora seguem o padrão do framework logback, com a adição dos níveis OFF, TRACE e ALL. As versões anteriores suportavam apenas ERROR, WARN, INFO e DEBUG.
Variáveis de ambiente agora são aceitas para configurar parâmetros de log, expandindo o suporte anterior limitado a
-D.
Client creation
Especificar um endpoint inválido gera uma exceção ao criar um produtor ou consumidor.
Message trace
Ao enviar e receber mensagens com a versão mais recente do SDK, os seguintes parâmetros passam a constar no resultado da consulta de rastreamento.
|
Parâmetro |
Descrição |
|
AccessKey |
AccessKey ID da sua conta Alibaba Cloud ou usuário RAM. Usado para verificação de identidade ao acessar recursos do ApsaraMQ for RocketMQ via SDK ou chamada de API. |
|
Arrival at server |
Momento em que a mensagem chegou ao servidor do ApsaraMQ for RocketMQ. |
|
Preset DeliverAt |
Horário previsto para entrega de uma mensagem agendada. |
|
Actual AvailableAt |
Término do temporizador de uma mensagem agendada, indicando quando ela ficou disponível para consumo. |
|
Available Time |
Instante em que a mensagem tornou-se disponível para consumo. |
|
Commit/Rollback time |
Horário de confirmação (commit) ou reversão (rollback) da mensagem transacional. |
|
Arrive at Consumer At |
Momento de chegada da mensagem ao cliente consumidor. |
|
Wait Duration before Processing |
Tempo decorrido entre a chegada da mensagem no consumidor e a alocação de thread e recursos pelo pool para processamento. |
Problemas corrigidos na V2.0.0
Corrigido o seguinte problema: chamadas múltiplas à operação updateCredential em curto período causavam falha na autorização entre contas para funções RAM via Security Token Service (STS). Isso ocorria devido à falta de atomicidade na atualização simultânea de AccessKey ID, AccessKey secret e STS token.
Para exemplos de código SDK sobre autorização STS, consulte Etapa 2: Acessar recursos entre contas Alibaba Cloud.