Questions & Answers

josef_kim
I'm new here

UX Deployment zu 2 Brokern

Hallo zusammen,

wir haben den UXB-Service bei uns laufen mit einer externen ActiveMQ. Wir tun darรผber XML Files deployen. Mit einem Broker funktioniert es aber mit 2 habe ich Probleme.

Die UX-Konfiguration sieht so aus:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://www.springframework.org/schema/jms"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

       http://camel.apache.org/schema/spring

       http://camel.apache.org/schema/spring/camel-spring.xsd

       http://www.springframework.org/schema/jms

       http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">

    <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">

        <property name="connectionFactory">

            <bean class="org.apache.activemq.ActiveMQConnectionFactory">

                <property name="brokerURL"

value="failover:(tcp://dmztomint01:61616)?maxReconnectAttempts=2&amp;startupMaxReconnectAttempts=10"/> 

            </bean>

        </property>

    </bean>

   

    <bean id="jms2" class="org.apache.camel.component.jms.JmsComponent">

        <property name="connectionFactory">

            <bean class="org.apache.activemq.ActiveMQConnectionFactory">

                <property name="brokerURL"

value="failover:(tcp://dmztomint02:61616)?maxReconnectAttempts=2&amp;startupMaxReconnectAttempts=10"/> 

            </bean>

        </property>

    </bean>

    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"

          destroy-method="stop">

        <property name="maxConnections" value="10"/>

        <property name="maximumActiveSessionPerConnection" value="500"/>

        <property name="connectionFactory" ref="jmsConnectionFactory"/>

    </bean>

        <bean id="pooledConnectionFactory2" class="org.apache.activemq.pool.PooledConnectionFactory"

          destroy-method="stop">

        <property name="maxConnections" value="10"/>

        <property name="maximumActiveSessionPerConnection" value="500"/>

        <property name="connectionFactory" ref="jmsConnectionFactory2"/>

    </bean>

    <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">

        <property name="connectionFactory" ref="pooledConnectionFactory"/>

        <property name="transacted" value="false"/>

        <property name="concurrentConsumers" value="10"/>

        <property name="deliveryPersistent" value="true" />

    </bean>

   

        <bean id="jmsConfig2" class="org.apache.camel.component.jms.JmsConfiguration">

        <property name="connectionFactory" ref="pooledConnectionFactory2"/>

        <property name="transacted" value="false"/>

        <property name="concurrentConsumers" value="10"/>

        <property name="deliveryPersistent" value="true" />

    </bean>

    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

    <property name="brokerURL" value="failover:(tcp://dmztomint01:61616)?maxReconnectAttempts=2&amp;startupMaxReconnectAttempts=10"/> 

    

    </bean>

   

        <bean id="jmsConnectionFactory2" class="org.apache.activemq.ActiveMQConnectionFactory">

    <property name="brokerURL" value="failover:(tcp://dmztomint02:61616)?maxReconnectAttempts=2&amp;startupMaxReconnectAttempts=10"/> 

    

    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">

        <property name="configuration" ref="jmsConfig"/>

    </bean>

   

        <bean id="activemq2" class="org.apache.activemq.camel.component.ActiveMQComponent">

        <property name="configuration" ref="jmsConfig2"/>

    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/spring" id="camelContext" trace="false">

        <package>com.espirit.moddev.uxbridge.service</package>

        <template id="producerTemplate"/>

        <endpoint id="FS-Out" uri="activemq:topic:FS_OUT"></endpoint>

        <onException>

            <exception>java.lang.Exception</exception>

            <handled>

                <constant>true</constant>

            </handled>

            <process ref="uxbExceptionProcessor" />

        </onException>

        <route id="Adapter-Statistics-Response-Route">

            <from uri="jms:topic:FS_IN"/>

            <convertBodyTo type="com.espirit.moddev.uxbridge.api.v1.service.UXBEntity"/>

            <bean ref="UxbServiceStatisticsResponseHandler" method="print"/>

        </route>

       

                <route id="Adapter-Statistics-Response-Route2">

            <from uri="jms2:topic:FS_IN"/>

            <convertBodyTo type="com.espirit.moddev.uxbridge.api.v1.service.UXBEntity"/>

            <bean ref="UxbServiceStatisticsResponseHandler2" method="print"/>

        </route>

       

       

    <route>

        <from uri="activemq:topic:FS_OUT"/>

        <to uri="activemq2:topic:FS_OUT"/>

        </route>

    </camelContext>

    <bean id="UxbServiceStatisticsResponseHandler"

          class="com.espirit.moddev.uxbridge.service.UxbServiceStatisticsResponseHandler">

        <constructor-arg ref="camelContext"/>

    </bean>

   

        <bean id="UxbServiceStatisticsResponseHandler2"

          class="com.espirit.moddev.uxbridge.service.UxbServiceStatisticsResponseHandler">

        <constructor-arg ref="camelContext"/>

    </bean>

    <bean id="uxbExceptionProcessor" class="com.espirit.moddev.uxbridge.inline.UxbExceptionProcessor"/>

</beans>

Ich bekomme allerdings Probleme in der Queue die bei mir "activemq2" heiรŸt. Dort werden mehr Messages deployt und ich bekomme Message in meine DLQ.

Gibt es Konfigurationsbeispiele wo ich die gleiche Anzahl an Nachrichten an mehrere Broker URLs versenden kann?

Danke und GrรผรŸe

Josef

0 Kudos
6 Replies
feddersen
Community Manager

Hallo Josef,

unsere Empfehlung ist in der Servicekonfiguration nur einen Broker /ActiveMQ zu haben und das Weiterleiten an andere ActiveMQ รผber die Konfiguration in der camel.xml zu lรถsen.

Also FS => ActiveMQ1 => MultiCast in camel.xml konfigurieren => ActiveMQ2.

Sonst wird das mit den Auftrรคgen und der Auswertung, ob die Nachrichten auch angekommen sind, deutlich komplizierter.

Also Service-Konfig in FS so lassen.

camel.xml in der UX-Bridge (ActiveMQ) um Multicast erweitern und dort auch den zweiten Broker konfigurieren

Details:

Apache Camel: Multicast

Ungetestet, um das Prinzip zu erklรคren:

Bisher:

<route id="uxbridge-route1">

            <from uri="activemq:topic:FS_OUT"/>

            <to uri="activemq:topic:VirtualTopic.BUS_OUT"/>

</route>

Neu:

<route id="uxbridge-route1">

            <from uri="activemq:topic:FS_OUT"/>

             <multicast stopOnException="true">

                <to uri="activemq:topic:VirtualTopic.BUS_OUT"/>

                <to uri="activemq2:topic:VirtualTopic.QUEUE_NAME_ON_BROKER2""/>

             </multicast>

</route>

Damit sollten alle Nachrichten in VirtualTopic.BUS_OUT von Broker1 und auf VirtualTopic.QUEUE_NAME_ON_BROKER2 von Broker2 landen

0 Kudos

Hallo Christoph,

das ist leider nicht mรถglich. Die zwei ActiveMq Instanzen sind komplett getrennt. Der Eine liegt im Intranet Netzwerk und darf auch keine Verbindung nach drauรŸen haben und der Andere liegt auf einem DMZ Server.

0 Kudos

Du kรถnntest eine zusรคtzliche ActiveMQ dort platzieren, wo jetzt der FS-Server ist. Der scheint ja Zugriff auf beide Zonen zu haben. Die ActiveMQ leitet dann an die beiden anderen weiter.

0 Kudos

Die Idee hatte ich auch schon aber dort wo der FS-Server lรคuft dรผrfen wir leider auch keine ActiveMQ instanz installieren. Gรคbe es noch andere Optionen?

0 Kudos

Du kannst den Multicast Ansatz natรผrlich auch in der Servicekonfiguration versuchen und hoffen, dass es damit keine Seiteneffekte fรผr die Statistiken und Resulthandler gibt. Kรถnnte klappen, hat aber noch niemand ausprobiert.

Wir hatten auch Kunden, die die ActiveMQ/Camel Funktionen genutzt haben um Nachrichten per HTTP auszutauschen. Dann hast du nur eine Verbindung von Innen nach auรŸen. Vielleicht ist das noch eine Variante, die man mit der IT-Security diskutieren kann.

0 Kudos

Hallo Christoph,

die Idee mit HTTP ist nicht schlecht - ich werde es mal ansprechen.

Ich habe es mal soweit auf dem CMS Server konifguriert und musste noch die Zahl der Concurrent Consumers auf 1 reduzieren.

Soweit scheint es gut zu funktionieren - aber ja du hast Recht der Resulthandler funktioniert natรผrlich nicht und die Statistik verfรคlscht sich.

Ich werde mal schauen was fรผr Erfahrungen wir auf unserer Integrationsumgebung machen mit dieser Konfiguration.

0 Kudos

Type a product name