Maison  >  Article  >  Java  >  Qu'est-ce qu'un processus de communication asynchrone avec des messages faiblement couplés ?

Qu'est-ce qu'un processus de communication asynchrone avec des messages faiblement couplés ?

零下一度
零下一度original
2017-06-28 09:38:001445parcourir

Qu'est-ce qu'un message

Processus de communication asynchrone faiblement couplé

1. le producteur ; l'emplacement où le message est stocké est appelé la destination ; le composant qui reçoit le message est appelé le consommateur

2. a. Point à point : La destination devient une file d'attente et le message ne peut être consommé qu'une seule fois
b. Publier-s'abonner : La destination devient le sujet, le consommateur est appelé abonné et le message peut être consommé par n'importe quel numéro

Service de messagerie Java

1. API JMS : fournit un moyen unifié et standard d'accéder à MOM (middleware de messages) à l'aide de Java

2. Développer le processus de production de messages :

a. Utilisez l'injection de dépendances pour obtenir la fabrique de connexions ConnectionFactory et les objets Destination
b. Utilisez createConnection de la fabrique de connexions pour ouvrir la connexion Connection
c. Utilisez createSession of Connection pour créer une session et spécifier les paramètres de transaction
d. Utilisez le createProducer de la session pour créer la file d'attente de fret Producer
e. Utilisez createMessage de Session pour créer un message Message et définir
f. Utilisez l'envoi du producteur de la file d'attente de fret pour envoyer le message
g. Libérer des ressources
Remarque : Le processus ci-dessus est basé sur JavaEE 6. JavaEE 7 fournit un processus de développement A plus simple

3. Interface de message : en-tête du message, attributs du message, corps du message ; classe d'implémentation : ObjectMessage transfère les objets, ByteMessage transfère les octets, MapMessage transfère la carte, StreamMessage transfère les données de flux et TextMessage transfère le texte

Bean géré par message (MDB)

1. Avantages : multi-threading, code de message simplifié

2. Principes de conception :

a. La classe MDB doit implémenter directement ou indirectement l'interface d'écoute de message
b. Cela doit être concret et public, cela ne peut pas être un cours final ou abstrait
c. Il doit s'agir d'un POJO et ne peut pas être une sous-classe d'un autre MDB
d. Il doit y avoir un constructeur sans paramètres
e. Il ne peut pas y avoir de méthode finale
f. Aucune exception d'exécution ne peut être levée, car l'instance MDB sera terminée une fois lancée

3. Utilisez MDB pour développer des processus consommateurs

a. Utilisez l'annotation @MessageDriven pour marquer la classe comme MDB et spécifier la configuration MDB
b. Implémentez l'interface MessageListener et implémentez la méthode onMessage
c. Implémenter la logique dans onMessage

4. @MessageDriven : La classe annotée est MDB. Cette annotation a trois paramètres name spécifie le nom du MDB messageListenerInterface spécifie l'interface de message implémentée par le MDB (l'interface peut être implémentée directement sur la classe activationConfig). spécifier les propriétés de configuration propriétaires

5. MessageLisener : enregistrez MDB en tant que consommateur de messages et implémentez différentes interfaces d'écoute selon différents scénarios

6. ActivationConfigProperty : Configurez les informations de configuration de la messagerie

a. destinationType : indique au conteneur si le MDB écoute une file d'attente ou un sujet
b. connectionFactoryJndiName : Spécifie la fabrique de connexions JDNI
utilisée pour créer la connexion JMS du MDB c. destianName : Spécifiez la destination d'écoute
d.knowledgeMode : Spécifiez le mode de confirmation de session JMS
e. abonnementDurabilité : utilisé pour définir comme abonné durable
f. messageSelector : filtrer les messages

7. Cycle de vie des MDB :

a. Créez des instances MDB et configurez-les
b. Injecter des ressources
c. Stocker dans une piscine gérée
d. Lors de la détection de la destination où le message arrive, supprimez le bean inactif du pool
e. Exécutez la méthode d'écoute de message, c'est-à-dire la méthode onMessage
f. Lorsque la méthode onMessage est exécutée, enregistrez le bean inactif dans le pool
g. Révoquer/détruire les beans de la piscine si nécessaire

8. Envoyer des messages depuis MDB : injectez dans la file d'attente depuis JNDI, connectez-vous à l'objet d'usine, puis procédez de la même manière que les messages Java

9. Gérer les transactions : dans des circonstances normales, la transaction est démarrée avant la méthode onMessage et la transaction est soumise à la fin de la méthode. La transaction peut être annulée via l'objet de contexte de message

. Meilleures pratiques MDB

1. Choisissez d'utiliser ou non MDB en fonction de l'utilisation

2. Choisissez le modèle de message : PTP ou publication-abonnement doit être décidé lors de la conception du programme, mais heureusement, basculer entre les deux ne nécessite que de modifier la configuration

3. Maintenir la modularité : la méthode onMessage de MDB ne doit pas gérer la logique métier. La logique métier doit être placée dans le bean session correspondant et injectée dans MDB est responsable de l'appel du bean session correspondant

. 4. Utilisez pleinement les filtres ou divisez les destinations selon la scène

5. Sélectionnez le type de message : Sélectionnez le type de message utilisé pour la transmission en fonction du scénario d'utilisation

6. Méfiez-vous des messages toxiques : les messages qui ne peuvent pas être consommés mais qui sont annulés tomberont dans une boucle infinie de réception/annulation. Bien que chaque fabricant ait ses propres implémentations de traitement des messages morts, vous devez faire attention lors de la programmation

.

7. Configurer la taille du pool MDB : Configurer selon le scénario et les besoins

Référence

EJB 3 en action, deuxième édition

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn