Maison  >  Article  >  Java  >  Utilisation de HornetQ pour le traitement des messages dans le développement d'API Java

Utilisation de HornetQ pour le traitement des messages dans le développement d'API Java

PHPz
PHPzoriginal
2023-06-17 23:27:091092parcourir

Utilisation de HornetQ pour le traitement des messages dans le développement d'API Java

Avec le développement rapide d'Internet, un grand nombre d'interactions d'informations sont apparues et les files d'attente de messages sont devenues un moyen important pour résoudre des problèmes tels que la haute concurrence, la haute disponibilité et l'asynchrone. traitement. HornetQ est un middleware de messagerie open source haute performance et haute disponibilité basé sur le protocole JMS développé par JBoss. Cet article explique comment utiliser HornetQ pour le traitement des messages dans le développement d'API Java.

1. Démarrage rapide

  1. Télécharger HornetQ

Le site officiel de HornetQ (http://hornetq.apache.org/downloads.html) propose des packages de téléchargement dans une variété de formats. Ici, choisissez HornetQ-2.4.0. Finale -bin.tar.gz.

  1. Installez HornetQ

Une fois le téléchargement terminé, décompressez HornetQ-2.4.0.Final-bin.tar.gz dans un dossier local.

  1. Démarrez HornetQ

Entrez le répertoire bin de HornetQ et exécutez la commande suivante :

  ./run.sh

Les informations de journal suivantes indiquent que le service HornetQ a été démarré avec succès :

  11:14:21,867 INFO [ServerImpl] Démarrage du serveur HornetQ
 11:14:21,986 INFO [JournalStorageManager] Utilisation de NIO Journal
 11:14:22,626 INFO [NettyAcceptor] Démarrage de la version #{version} de Netty Acceptor
 11:14:22,697 INFO [HornetQServerImpl] Serveur HornetQ version #{version} [${name}] démarrée

  1. Déployez la console HornetQ

Placez le fichier hornetq-console.war de HornetQ dans le répertoire webapps de Tomcat, démarrez Tomcat et accédez à HornetQ via http://localhost:8080/hornetq- console console.

2. Utilisation de HornetQ

  1. Publier et recevoir des messages

Le modèle de publication et d'abonnement de HornetQ est basé sur le sujet. La partie publiatrice publie des messages sur un sujet donné, et plusieurs extrémités réceptrices peuvent s'abonner à ce sujet en même temps. . Les messages publiés par plusieurs éditeurs peuvent être reçus.

(1) Éditeur du message

Créez d'abord un éditeur (Publisher) pour envoyer le message, le code est le suivant :

public class Publisher {

    public static void main(String[] args) throws Exception {

        // 初始化连接工厂等配置信息
        ConnectionFactory connectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, new TransportConfiguration(NettyConnectorFactory.class.getName()));
        JMSContext jmsContext = connectionFactory.createContext();

        // 发送消息
        JMSProducer producer = jmsContext.createProducer();
        Destination destination = HornetQJMSClient.createTopic("exampleTopic");
        producer.send(destination, "Hello, HornetQ!");

        // 关闭连接
        jmsContext.close();
    }
}

(2) Destinataire du message

Créez ensuite un destinataire (Abonné) pour recevoir le message et envoyer le message Imprimez-le, le code est le suivant :

public class Subscriber {

    public static void main(String[] args) throws Exception {

        // 初始化连接工厂等配置信息
        ConnectionFactory connectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, new TransportConfiguration(NettyConnectorFactory.class.getName()));
        JMSContext jmsContext = connectionFactory.createContext();

        // 创建消费者
        Destination destination = HornetQJMSClient.createTopic("exampleTopic");
        JMSConsumer consumer = jmsContext.createConsumer(destination);

        // 接收消息并打印
        String message = null;
        do {
            message = consumer.receiveBody(String.class, 1000);
            System.out.println("Received message: " + message);
        } while (message != null);

        // 关闭连接
        jmsContext.close();
    }
}

Après avoir exécuté l'éditeur et le récepteur, vous pouvez visualiser le message envoyé par l'éditeur sur la console HornetQ, comme le montre la figure ci-dessous :

  1. Persistance du message

HornetQ prend en charge le traitement des messages. Stockage persistant, ce qui signifie que même si HornetQ est en panne, les messages peuvent être garantis de ne pas être perdus.

(1) Expéditeur

Nous devons définir la persistance du message sur DeliveryMode.PERSISTENT, comme indiqué ci-dessous :

public class Publisher {

    public static void main(String[] args) throws Exception {

        ConnectionFactory connectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, new TransportConfiguration(NettyConnectorFactory.class.getName()));
        JMSContext jmsContext = connectionFactory.createContext();

        // 设定持久性
        JMSProducer producer = jmsContext.createProducer();
        destination = HornetQJMSClient.createTopic("exampleTopic");
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);

        // 发送消息
        producer.send(destination, "Hello, HornetQ!");

        jmsContext.close();
    }
}

(2) Destinataire

HornetQ a conservé le message par défaut, il n'est donc pas nécessaire de le faire effectuez une configuration spécifique côté client, continuez simplement à utiliser la classe Subscriber dans la section précédente.

  1. Mode cluster

HornetQ offre une haute disponibilité et peut être exécuté en mode cluster pour garantir la fiabilité des messages et une simultanéité élevée. Voici les étapes pour implémenter le mode cluster HornetQ :

(1) Copiez le répertoire HornetQ et créez un nouveau dossier

Copiez le répertoire HornetQ et renommez-le en HornetQ2, puis créez un nouveau dossier nommé cluster et modifiez le dossier sous le répertoire HornetQ2 Copiez tous les répertoires de données, répertoires de journaux, répertoires tmp et autres dossiers dans le dossier du cluster.

(2) Modifiez le fichier de configuration

Dans le dossier de configuration examples/configs/clustered sous le répertoire HornetQ, copiez le fichier hq-configuration.xml et les dossiers server0 et server1 dans le répertoire HornetQ2, et modifiez-le comme suit. fichier hornetq-configuration.xml dans le dossier server0 :

   (a) Changez le nom du nœud en server0

   (b) Changez le nom d'utilisateur et le mot de passe du serveur dans les connexions de cluster en "guest"

   (c) Modifier l'adresse du connecteur à l'adresse IP locale, telle que 192.168.1.1

  (d) Définissez use-ha sous jms-configuration sur true

  comme indiqué ci-dessous :

<configuration xmlns="urn:hornetq"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="urn:hornetq /schema/hornetq-configuration.xsd">
    <cluster-password>guest</cluster-password>
    <paging-directory>${data.dir:../data}/paging</paging-directory>
    <bindings-directory>${data.dir:../data}/bindings</bindings-directory>
    <journal-directory>${data.dir:../data}/journal</journal-directory>
    <large-messages-directory>${data.dir:../data}/large-messages</large-messages-directory>
    <journal-type>NIO</journal-type>
    <journal-datasync>true</journal-datasync>
    <journal-min-files>2</journal-min-files>
    <journal-pool-files>10</journal-pool-files>
    <journal-file-size>10240</journal-file-size>
    <journal-buffer-timeout>28000</journal-buffer-timeout>
    <journal-max-io>1</journal-max-io>
    <disk-scan-period>5000</disk-scan-period>
    <max-disk-usage>90</max-disk-usage>
    <critical-analyzer>true</critical-analyzer>
    <critical-analyzer-timeout>120000</critical-analyzer-timeout>
    <critical-analyzer-check-period>60000</critical-analyzer-check-period>
    <critical-analyzer-policy>HALT</critical-analyzer-policy>
    <page-sync-timeout>1628000</page-sync-timeout>
    <global-max-size>100Mb</global-max-size>
    <connectors>
        <connector name="netty">
            <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
            <param key="host" value="192.168.1.1"/>
            <param key="port" value="5445"/>
        </connector>
    </connectors>
    <acceptors>
        <acceptor name="netty">
            <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
            <param key="host" value="192.168.1.1"/>
            <param key="port" value="5545"/>
        </acceptor>
    </acceptors>
    <cluster-connections>
        <cluster-connection name="my-cluster">
            <address>jms</address>
            <connector-ref>netty</connector-ref>
            <retry-interval>500</retry-interval>
            <use-duplicate-detection>true</use-duplicate-detection>
            <forward-when-no-consumers>true</forward-when-no-consumers>
            <max-hops>1</max-hops>
            <discovery-group-ref discovery-group-name="my-discovery-group"/>
            <static-connectors>
                <connector-ref>netty</connector-ref>
            </static-connectors>
        </cluster-connection>
    </cluster-connections>
    <ha-policy>
        <replication>
            <slave>
                <allow-failback>true</allow-failback>
                <failback-delay>5000</failback-delay>
                <max-saved-replicated-journals-size>1000000</max-saved-replicated-journals-size>
                <restart-backup>true</restart-backup>
            </slave>
        </replication>
    </ha-policy>
</configuration>

Modifiez ensuite le dossier server1 de la même manière hornetq-configuration Fichier .xml dans lequel server0 est remplacé par server1.

(3) Démarrez HornetQ

Exécutez la commande run.sh dans le répertoire bin de HornetQ et HornetQ2 pour démarrer le processus HornetQ. À ce stade, les deux nœuds HornetQ forment un cluster, qui peut être visualisé via la console HornetQ.

3. Résumé

Grâce à l'introduction de cet article, nous avons découvert l'utilisation de base de HornetQ et la méthode de configuration du mode cluster. L'utilisation de HornetQ peut facilement résoudre le problème de l'interaction des messages et améliorer la robustesse et la concurrence du système. Dans le même temps, HornetQ prend également en charge plusieurs modes de messagerie, de riches mécanismes de persistance des messages, des plug-ins d'extension et d'autres fonctionnalités, qui peuvent être sélectionnés et configurés en fonction des besoins réels.

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