

O Courier é uma biblioteca Kotlin para criar conexões de longa execução usando o protocolo MQTT.
A conexão de longa execução é uma conexão persistente estabelecida entre cliente e servidor para comunicação bidirecional instantânea. Uma conexão de longa execução é mantida para o máximo possível duração com a ajuda de pacotes de Keep Alive. Isso ajuda a economizar bateria e dados em dispositivos móveis.
O MQTT é um protocolo extremamente leve que funciona no modelo de mensagens de publicação/inscrição. Ele foi projetado para conexões com locais remotos, onde é necessária uma "pegada de código pequena" ou a largura de banda de rede é limitada.
O protocolo geralmente percorre TCP/IP; No entanto, qualquer protocolo de rede que forneça conexões ordenadas, sem perdas e bidirecionais, pode suportar o MQTT.
O MQTT possui 3 níveis de QoS integrados para entrega de mensagens confiáveis:
QoS 0 (no máximo uma vez) - A mensagem é enviada apenas uma vez e o cliente e o corretor não tomam medidas adicionais para reconhecer a entrega (incêndio e esquecer).
QoS 1 (pelo menos uma vez) - A mensagem é re -intrigada pelo remetente várias vezes até que o reconhecimento seja recebido (entrega reconhecida).
QoS 2 (exatamente uma vez) - O remetente e o receptor se envolvem em um aperto de mão de dois níveis para garantir que apenas uma cópia da mensagem seja recebida (entrega garantida).
Encontre a documentação detalhada aqui - https://gojek.github.io/courier-android/
Exemplo de courier de ponta ao final-https://gojek.github.io/courier/docs/introduction
API limpo
Adaptativo Mantenha vivo
Adaptadores de mensagem e fluxo
Loja de assinaturas
Reconecção e assinatura automática
Persistência do banco de dados
Manuseio de contrapressão
Alarme, cronômetro e WorkManager Ping Remetente
MQTT Chuck
Mais detalhes sobre os recursos na biblioteca de correio podem ser encontrados aqui
Um aplicativo de demonstração é adicionado aqui, o que torna a conexão de correio com um corretor público do Hivemq.
Todos os artefatos da Biblioteca Courier estão disponíveis na Maven Central.
repositories {
mavenCentral()
}
dependencies {
implementation " com.gojek.courier:courier:x.y.z "
implementation " com.gojek.courier:courier-message-adapter-gson:x.y.z "
implementation " com.gojek.courier:courier-stream-adapter-rxjava2:x.y.z "
}Declare uma interface de serviço para ações como enviar, receber, assinar, cancelar a inscrição:
interface MessageService {
@Receive(topic = " topic/{id}/receive " )
fun receive (@Path( " id " ) identifier : String ): Observable < Message >
@Send(topic = " topic/{id}/send " , qos = QoS . TWO )
fun send (@Path( " id " ) identifier : String , @Data message : Message )
@Subscribe(topic = " topic/{id}/receive " , qos = QoS . ONE )
fun subscribe (@Path( " id " ) identifier : String ): Observable < Message >
@Unsubscribe(topics = [ " topic/{id}/receive " ])
fun unsubscribe (@Path( " id " ) identifier : String )
}Use Courier para criar uma implementação:
val mqttClient = MqttClientFactory .create(
context = context,
mqttConfiguration = MqttV3Configuration (
authenticator = authenticator
)
)
val courierConfiguration = Courier . Configuration (
client = mqttClient,
streamAdapterFactories = listOf ( RxJava2StreamAdapterFactory ()),
messageAdapterFactories = listOf ( GsonMessageAdapter . Factory ())
)
val courier = Courier (courierConfiguration)
val messageService = courier.create< MessageService >()messageService.subscribe( " user-id " ).subscribe { message ->
print (message)
}
messageService.unsubscribe( " user-id " )messageService.send( " user-id " , message)
messageService.receive( " user-id " ) { message ->
print (message)
} val connectOptions = MqttConnectOptions (
serverUris = listOf ( ServerUri ( SERVER_URI , SERVER_PORT )),
clientId = clientId,
username = username,
keepAlive = KeepAlive (
timeSeconds = keepAliveSeconds
),
isCleanSession = cleanSessionFlag,
password = password
)
mqttClient.connect(connectOptions)mqttClient.disconnect()Esta opção permite que você envie Propriedades do usuário no pacote Connect para MQTT v3.1.1.
val connectOptions = MqttConnectOptions (
serverUris = listOf ( ServerUri ( SERVER_URI , SERVER_PORT )),
clientId = clientId,
.. .
userPropertiesMap = mapOf (
" key1 " to " value1 " ,
" key2 " to " value2 "
)
)
mqttClient.connect(connectOptions)Leia nosso guia de contribuição para aprender sobre nosso processo de desenvolvimento, como propor bugs e melhorias e como criar e testar suas alterações na biblioteca Android Courier.
Todos os módulos de Courier, exceto Paho, são licenciados pelo MIT. O PAHO é licenciado eclipse.