MQ résoud les problèmes de consommation multiples des messages (5)

Table des matières

  • Sixième partie : Les problèmes de consommation multiples des messages
    1. Qu'est-ce que l'identité
    1. L'identité dans les requêtes
    1. L'identité dans les files de messages
    1. Comment implémenter l'identité dans le code de la logique
    1. Modифика des paramètres de configuration au producteur
    1. Transmettre l'identité au consommateur
    1. Implémentation de la logique d'identité au niveau du consommateur

Sixième partie : Les problèmes de consommation multiples des messages

  1. Qu'est-ce que l'identité

L'identité : Plusieurs opérations ont un résultat cohérent. Pour les opérations non identitaires, Comment garantir l'identité ? — Utiliser un bloc de synchronisation distribué.

1) L'identité dans les requêtes

  • get : Plusieurs get donnent un résultat cohérent
  • post : Ajout, opération non identitaire
  • put : Modifié, opération identitaire (selon l'identité)
  • delete : Suppression, opération identitaire (selon l'identité)

Pour les opérations non identitaires, Nous devons garantir l'identité au niveau de la logique.

2) L'identité dans les files de messages

Dans les files de messages, Une messagerie peut être rediffusée à plusieurs consommateurs. Pour les opérations non identitaires, Par exemple, la création d'un compte, il faut garantir l'identité, sinon la messagerie sera consommée multiples fois. Utiliser un bloc de synchronisation distribué.

  1. Comment implémenter l'identité dans le code de la logique

1) Modif de paramètres de configuration au producteur

publisher-identify-type: correlated : Laisser le paramètre de confirmation de la requête inclure "spring_returned_message_correlation" dans l'en-tête de confirmation ; correlated : Laisser le paramètre de confirmation inclure "spring_returned_message_correlation" et la valeur dans le message de retour ; none : Ne faire aucunAck, le défaut

server:
  port: 9090
spring:
  rabbitmq:
    host: 172.16.253.8
    port: 5672
    username: xiaoming
    password: 123456
    virtual-host: java2007
#    # L'initialisation du confirm simple : simple exécution de ack ; correlated : exécution de ack avec portée de données ; none : ne faire aucun ack, le défaut
    publisher-identify-type: correlated
#    # L'initialisation du retour
#    publisher-returns: true




2)Transmission de l'identité au producteur

@Test
    public void testSendMessage(){

        // Identité
        String id = UUID.randomUUID().toString();
        // Création de la données d'identité du message
        CorrelationData correlationData = new CorrelationData(id);
        // Envoi du message et portée de données de l'identité
        rabbitTemplate.convertAndSend("my_boot_topic_exchange",
                "product.add",
                "hello message",
                correlationData
                );
    }


3) Implémentation de la logique d'identité au niveau du consommateur

/**
* Exécution de la logique d'identité au niveau du consommateur
*/
@RabbitListener(queues = "my_boot_topic_queue")
public void processByMSG(Message message,Channel channel) throws IOException {
// Obtenir l'identité du message
String messageId = message.getMessageProperties().getHeader("spring_returned_message_correlation");
// Gestion du bloc de synchronisation distribué
Boolean lock = redisTemplate.opsForValue().setIfAbsent(messageId, 1,100000, TimeUnit.MILLISECONDS);
if(lock){
// Exécution de la consommation
System.out.println(" Ajout du utilisateur enregistré");
// Fermeture manuelle de l'ack
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
}else{
// Refus de la consommation
System.out.println(" Consommation déjà effectuée");
channel.basicReject(message.getMessageProperties().getDeliveryTag(),false);
}

}



tag1,tag2,tag3



MQ résoud les problèmes de consommation multiples des messages (5)

Table des matières
- Sixième partie : Les problèmes de consommation multiples des messages
- **1. Qu'est-ce que l'identité**
- **1) L'identité dans les requêtes**
- **- get : Plusieurs get donnent un résultat cohérent**
- **- post : Ajout, opération non identitaire**
- **- put : Modifié, opération identitaire (selon l'identité)**
- **- delete : Suppression, opération identitaire (selon l'identité)**
2) L'identité dans les files de messages
- **Dans les files de messages, Une messagerie peut être rediffusée à plusieurs consommateurs.**
- **Par exemple, la création d'un compte, il faut garantir l'identité, sinon la messagerie sera consommée multiples fois.**
- **Utiliser un bloc de synchronisation distribué.**

2. Comment implémenter l'identité dans le code de la logique
- **1) Modифика des paramètres de configuration au producteur**
- **publisher-identify-type: correlated**
- **Laisser le paramètre de confirmation de la requête inclure "spring\\\_returned\\\_message\\\_correlation" dans l'en-tête de confirmation ; correlated : Laisser le paramètre de confirmation inclure "spring\\\_returned\\\_message\\\_correlation" et la valeur dans le message de retour ; none : Ne faire aucunAck, le défaut**
2)Transmission de l'identité au producteur
- **Utiliser CorrelationData pour stocker l'identité**
- **Exemple de code Java**
3) Implémentation de la logique d'identité au niveau du consommateur
- **Utiliser un bloc de synchronisation distribué pour éviter la double consommation**
- **Exemple de code Java**




tag1,tag2,tag3

Étiquettes: tag1 tag2 tag3

Publié le 16 août à 14h40