Quelqu'un pourrait-il fournir un exemple d'application de messagerie fonctionnant sous un cluster Wildfly 10 (domaine)? Nous nous débattons avec cela et étant donné que c'est une nouvelle technologie, il y a un manque terrible de ressources.Messagerie Artemis (ActiveMQ) dans le cluster Wildfly 10 (domaine)
Actuellement, nous avons ce qui suit:
Un domaine se composant de deux ordinateurs (nœuds) et trois groupes de chaque, à savoir six serveurs distincts dans le domaine.
une partie pertinente de configuration du serveur (en domain.xml):
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
<server name="default">
<security enabled="false"/>
<cluster password="${jboss.messaging.cluster.password}"/>
<security-setting name="#">
<role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/>
</security-setting>
<address-setting name="#" redistribution-delay="1000" message-counter-history-day-limit="10" page-size-bytes="2097152" max-siz
<http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/>
<http-connector name="http-connector-throughput" endpoint="http-acceptor-throughput" socket-binding="http">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-acceptor name="http-acceptor-throughput" http-listener="default">
<param name="batch-delay" value="50"/>
<param name="direct-deliver" value="false"/>
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
<broadcast-group name="bg-group1" connectors="http-connector" jgroups-channel="activemq-cluster" jgroups-stack="tcphq"/>
<discovery-group name="dg-group1" jgroups-channel="activemq-cluster" jgroups-stack="tcphq"/>
<cluster-connection name="my-cluster" discovery-group="dg-group1" connector-name="http-connector" address="jms"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<jms-queue name="TestQ" entries="java:jboss/exported/jms/queue/testq"/>
<connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
<connection-factory name="RemoteConnectionFactory" reconnect-attempts="-1" block-on-acknowledge="true" ha="true" entries="java
<pooled-connection-factory name="activemq-ra" transaction="xa" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" co
</server>
</subsystem>
la configuration est plus ou moins défaut, à l'exception ajouté TestQ file d'attente.
tcphq pile est défini dans la configuration JGroups comme suit:
<stack name="tcphq">
<transport type="TCP" socket-binding="jgroups-tcp-hq"/>
<protocol type="TCPPING">
<property name="initial_hosts">
dev1[7660],dev1[7810],dev1[7960],dev2[7660],dev2[7810],dev2[7960]
</property>
<property name="port_range">
0
</property>
</protocol>
<protocol type="MERGE3"/>
<protocol type="FD_SOCK" socket-binding="jgroups-tcp-hq-fd"/>
<protocol type="FD"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="MFC"/>
<protocol type="FRAG2"/>
</stack>
J'ai écrit une application de test consistant à partir d'un simple "serveur", MDB sens et un client comme suit:
Server (MDB):
@MessageDriven(mappedName = "test", activationConfig = {
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:jboss/exported/jms/queue/testq"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class MessageServer implements MessageListener {
@Override
public void onMessage(Message message) {
try {
ObjectMessage msg = null;
if (message instanceof ObjectMessage) {
msg = (ObjectMessage) message;
}
System.out.print("The number in the message: "+ msg.getIntProperty("count"));
} catch (JMSException ex) {
Logger.getLogger(MessageServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Client:
@Singleton
@Startup
public class ClientBean implements ClientBeanLocal {
@Resource(mappedName = "java:jboss/exported/jms/RemoteConnectionFactory")
private ConnectionFactory factory;
@Resource(mappedName = "java:jboss/exported/jms/queue/testq")
private Queue queue;
@PostConstruct
public void sendMessage() {
Connection connection = null;
try {
connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
Message message = session.createObjectMessage();
message.setIntProperty("count", 1);
producer.send(message);
System.out.println("Message sent.");
} catch (JMSException ex) {
Logger.getLogger(ClientBean.class.getName()).log(Level.SEVERE, null, ex);
} catch (NamingException ex) {
Logger.getLogger(ClientBean.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (connection != null) connection.close();
} catch (JMSException ex) {
Logger.getLogger(ClientBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Il fonctionne en réalité bien si le client et le serveur se trouvent dans le même groupe. Dans un tel cas, il semble même qu'il communique entre les hôtes (nœuds). Toutefois, si le serveur et le client appartiennent à des groupes différents, MDB n'est pas appelé. De plus, il semble même que MDB n'est invoqué que s'il réside dans le groupe avec 0 offset. Lorsque j'ai déplacé le serveur MDB dans un groupe différent, il ne répondait pas même si le client appartenait au même groupe.
Je suis un peu confus au sujet de JMS dans Wildfly 10. Il y a beaucoup d'exemples et de matériaux pour les anciennes versions avec HornetQ, mais très peu pour Artemis. Quelqu'un pourrait-il aider? Merci beaucoup.
Eh bien, je me suis retrouvé ici à la recherche de comment configurer le sous-système 'jboss : domain: messaging-activemq: 1.0' pour se connecter à un serveur ActiveMQ distant. Une idée? –
L'un d'entre vous a-t-il réellement résolu cela? Comme nous sommes en train de trébucher sur un problème similaire actuellement et je suppose: si votre déploiement se trouve sur un groupe de serveurs différent, il se trouve sur une instance différente de wildfly - il semble que cela doit être géré en quelque sorte à distance. – PepperBob