


ActiveMQ in Tomcat einbetten: Drei wichtige Wissenspunkte müssen beherrscht werden
ActiveMQ eingebettet in Tomcat
In manchen Projekten ist das separate Öffnen eines ActiveMQ für die Projektumsetzung manchmal etwas umständlich. Also betten wir ActiveMQ in Tomcat ein und ActiveMQ wird gleichzeitig mit Tomcat gestartet. Daraus müssen wir drei wichtige Wissenspunkte beherrschen
BrokerService in ActiveMQ
Automatisch startende Servlet-Konfiguration
Verwenden Sie jconsole, um den Ausführungsstatus von eingebettetem ActiveMQ zu verstehen
1. Aktivieren Sie BrokerService
Fügen Sie eine ActiveMQ-Abhängigkeit in pom.xml hinzu , Denken Sie daran: activemq-core
reicht aus.
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency>
Achten Sie beim Schreiben des BrokerService
-Codes auf drei Hauptpunkte
Ob Überwachungsinformationen in
angezeigt werden müssenjconsole
broker.setUseJmx(true)
Legen Sie den Benutzernamen und das Passwort für die Verbindung fest, wie Sie das Verifizierungs-Plug-in verwenden
Ob beibehalten werden soll, Speicherorteinstellungen, Persistenzkonfiguration
Sie müssen also eine Verbindungsadresse tcp://localhost:61616
starten, der Benutzername ist admin
, das Passwort ist admin
, es muss beibehalten werden, die Speicheradresse der persistenten Datendatei ist /activemq
, und Sie müssen den von jconsole
überwachten Code von BrokerService wie folgt starten:
// 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. Produzenten und Konsumenten
In ActiveMQ gibt es zwei allgemeine Nachrichtenübermittlungsmethoden
Warteschlange, die die Persistenz von Nachrichten unterstützt, nicht verbrauchte Nachrichten sind nach dem Neustart weiterhin vorhanden. Wenn mehrere Verbraucher vorhanden sind, teilen sich alle Verbraucher die Nachricht
gleichermaßen in der Warteschlange. Die Nachrichtenpersistenz wird nicht unterstützt und nicht verbrauchte Nachrichten wird sein. Nachrichten gehen nach dem Neustart verloren. Wenn mehrere Verbraucher vorhanden sind, verbraucht jeder Verbraucher nacheinander alle Nachrichten im Thema
Unabhängig davon, ob sie vom Produzenten- oder Verbrauchercode geschrieben wurden, gibt es hauptsächlich 4 Schritte
Stellen Sie eine Verbindung her, verwenden Sie die
failover:()
-Methode, trennen Sie die Verbindung automatisch und stellen Sie die Verbindung wieder herHerstellen
Session
, erhalten Sie das Senden oder Empfangen ZielDestination
, geben Sie an, ob es sich um eine Warteschlange (session.createQueue(queueName)
) oder ein Thema (session.createTopic(topicName)
) handeltBringen Sie den Produzenten oder Verbraucher durch
Session
Nachrichten produzieren oder konsumieren
Wir schreiben jetzt einen Produzentencode und eine Schleife, um 10 Nachrichten zu generieren
// 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); }
Schreiben Sie einen Verbraucher, der die 10 Nachrichten konsumiert oben
// 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(); } } });
Betriebseffekt
Es ist ersichtlich, dass die 10 von unserem Produzenten generierten Nachrichten vom Verbraucher erfolgreich verarbeitet wurden.
3. Überwachen Sie eingebettetes ActiveMQ
Für eingebettetes ActiveMQ müssen Sie „broker.setUseJmx(true)“ festlegen, bevor Sie BrokerService starten. Suchen Sie dann Ihr JAVA_HOME, wechseln Sie zu „bin“ und geben Sie den Befehl „jconsole“ ein.
Wählen Sie nach dem Start von jconsole den Prozess aus, in dem sich ActiveMQ befindet. Wählen Sie nach dem Herstellen der Verbindung die Registerkarte „Mbean“
. Die roten Kästchen zeigen die Anzahl der verbrauchten bzw. in MQ eingegebenen Nachrichten an. Wählen Sie den Vorgang aus, suchen Sie nach SendTextMessage und Sie können auch Nachrichten an diese Warteschlange senden.
4. Selvelt startet mit Tomcat
Für Tomcat- und Selvelt-Versionen nach Tomcat7 bedeutet der Wert >=0, dass ein Selbststart erforderlich ist loadOnStartup
// 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代码 } }
verlässt, was dazu führt, dass Nachrichten verbunden, aber nicht gesendet werden. Später habe ich es direkt in activemq-broker
geändert und es gab einen SLF4J-Protokollkonflikt. Die Verwendung von activemq-all
konnte das Problem immer noch nicht lösen. Am Ende löst nur das Verlassen auf exclusions
alle Probleme perfekt. activemq-core
JMS-Nachrichtenpersistenz, ActiveMQ-Nachrichten in der MySQL-Datenbank beibehalten
Verstehen der Sitzungseinstellungen in ActiveMQ
Das obige ist der detaillierte Inhalt vonActiveMQ in Tomcat einbetten: Drei wichtige Wissenspunkte müssen beherrscht werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.
