Maison  >  Article  >  Java  >  Intégrer ActiveMQ dans Tomcat : trois points de connaissances importants à maîtriser

Intégrer ActiveMQ dans Tomcat : trois points de connaissances importants à maîtriser

php是最好的语言
php是最好的语言original
2018-08-03 14:34:172327parcourir

ActiveMQ intégré à Tomcat

Dans certains projets, ouvrir un ActiveMQ séparément est parfois un peu fastidieux pour la mise en œuvre du projet. Nous intégrons donc ActiveMQ dans Tomcat, et ActiveMQ est démarré en même temps que Tomcat. À partir de là, nous devons maîtriser trois points de connaissances importants
  • BrokerService dans ActiveMQ

  • Configuration du servlet à démarrage automatique

  • Utilisez jconsole pour comprendre l'état d'exécution d'ActiveMQ intégré

1 Activer BrokerService

Ajouter une dépendance ActiveMQ dans pom.xml. , N'oubliez pas que activemq-core suffit.

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.7.0</version>
</dependency>

Lors de l'écriture du code BrokerService, faites attention à trois points principaux

  1. Si les informations de surveillance doivent être affichées dans jconsolebroker.setUseJmx(true)

  2. Définir le nom d'utilisateur et le mot de passe de connexion, comment utiliser le plug-in de vérification

  3. S'il faut persister, paramètres d'emplacement de stockage, configuration de persistance

Vous devez donc démarrer une adresse de connexion tcp://localhost:61616, le nom d'utilisateur est admin, le mot de passe est admin, il doit être conservé, l'adresse de stockage du persistant Le fichier de données est /activemq, et vous devez démarrer le BrokerService surveillé par jconsole Le code est le suivant :

    // author:herbert qq:464884492
    BrokerService broker = new BrokerService();
    broker.setUseJmx(true); // 开启监控
    broker.setPersistent(true); // 持久化
    broker.setBrokerName("Test");
    SimpleAuthenticationPlugin sap = new SimpleAuthenticationPlugin();
    AuthenticationUser au = new AuthenticationUser("admin", "admin","users");
    ArrayList<AuthenticationUser> d = new ArrayList<AuthenticationUser>();
    d.add(au);
    sap.setUsers(d); // 用户验证
    broker.setPlugins(new BrokerPlugin[] { sap });
    String mqDataPath = "/activemq"; // 存储位置 
    broker.getPersistenceAdapter().setDirectory(new File(mqDataPath));
    broker.addConnector("tcp://localhost:61616"); // 连接地址
    broker.start();

2. Producteurs et consommateurs

Dans ActiveMQ, il y a deux méthodes générales de livraison des messages

  • Queue , prend en charge la persistance des messages et les messages non consommés existeront toujours après le redémarrage. S'il y a plusieurs consommateurs, en partant du principe d'extraire un message à la fois, tous les consommateurs partageront les sujets du message

  • dans la file d'attente de la même manière. La persistance des messages n'est pas prise en charge de manière égale, et les messages non consommés. sera Les messages sont perdus après le redémarrage. S'il y a plusieurs consommateurs, chaque consommateur consomme à tour de rôle tous les messages du sujet

Que ce soit écrit par le producteur ou le code du consommateur, il y en a principalement 4 étapes

  1. Établir une connexion, utiliser la méthode failover:(), se déconnecter et se reconnecter automatiquement

  2. Établir Session, obtenir l'envoi ou cible de réceptionDestination, précisez s'il s'agit d'une file d'attente (session.createQueue(queueName)) ou d'un sujet (session.createTopic(topicName))

  3. Obtenez le producteur ou le consommateur via Session

  4. Produire ou consommer des messages

Nous écrivons maintenant un code producteur et une boucle pour générer 10 messages

 // author:herbert qq:464884492
String mqConnUrl = "tcp://localhost:61616";
String connUrl = "failover:(" + mqConnUrl.trim()+ ")?initialReconnectDelay=1000&maxReconnectDelay=30000";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin","admin", connUrl);
javax.jms.Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("system");
MessageProducer messageProducer = session.createProducer(destination);

for (int i = 0; i < 10; i++) {
 javax.jms.TextMessage message = session.createTextMessage("ActiveMQ 发送的消息" + i);
 System.out.println("发送消息:" + "ActiveMQ 发送的消息" + i);
 messageProducer.send(message);
}

Écrire un consommateur pour consommer les 10 messages ci-dessus Message

 // author:herbert qq:464884492
String mqConnUrl = "tcp://localhost:61616";
String connUrl = "failover:(" + mqConnUrl.trim()+ ")?initialReconnectDelay=1000&maxReconnectDelay=30000";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", connUrl);
javax.jms.Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("system");
MessageConsumer messageConsumer = session.createConsumer(destination);
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(javax.jms.Message message) {
   ActiveMQTextMessage m = (ActiveMQTextMessage) message;
    try {
          System.out.println("接收到:" + m.getText());
         } catch (JMSException e) {
         e.printStackTrace();
        }
     }
});

Effet de l'opération

Intégrer ActiveMQ dans Tomcat : trois points de connaissances importants à maîtriser

On peut voir que les 10 messages générés par notre producteur ont été traités avec succès par le consommateur .

3. Surveillez ActiveMQ intégré

Pour ActiveMQ intégré, vous devez définir broker.setUseJmx(true) avant de démarrer BrokerService ; puis recherchez votre JAVA_HOME, passez à bin et entrez la commande jconsole.

Intégrer ActiveMQ dans Tomcat : trois points de connaissances importants à maîtriser

Après le démarrage de jconsole, sélectionnez le processus où se trouve ActiveMQ. Après la connexion, sélectionnez l'onglet Mbean

Intégrer ActiveMQ dans Tomcat : trois points de connaissances importants à maîtriser

Les cases rouges indiquent respectivement le nombre de messages qui ont été consommés et ceux qui sont entrés dans MQ. Sélectionnez l'opération, recherchez le SendTextMessage et vous pouvez également envoyer des messages à cette file d'attente.

4. Selvelt démarre avec Tomcat

Pour Tomcat et Selvelt après Tomcat7, la valeur >=0 signifie que plus la valeur est petite, plus la priorité est élevée loadOnStartup <.>

5. Résumé
 // author:herbert qq:464884492
@WebServlet(urlPatterns = "/initmq", loadOnStartup = 1)
public class InitMqServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
        super.init(config);
        // 这里编写启动ActiveMQ代码
 }
}

Cette fois, ActiveMQ est utilisé comme point d'entrée pour l'utilisation de la file d'attente de messages. De manière générale, tout s'est bien passé. Le seul problème est qu'il s'appuie trop sur activeMQ et sur jar

, ce qui entraîne la connexion des messages mais leur envoi. Plus tard, je l'ai changé directement en

, et il y a eu un conflit de journal slf4j. L'utilisation de activemq-broker n'a toujours pas résolu le problème. En fin de compte, s'appuyer uniquement sur activemq-all résout parfaitement tous les problèmes. exclusions activemq-coreArticles associés :

Articles associés :


Persistance des messages JMS, conservation des messages ActiveMQ dans la base de données mySql

Compréhension des paramètres de session dans ActiveMQ

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