TeslimatMode'u açıkça NONPERSISTENT olarak ayarlamaya ve ActiveMQ'ya göndermeye çalışıyorum.Spring JMS'li ActiveMQ - nasıl HABERLEŞME iletisi gönderilir?
<?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:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.app" />
<!-- enable the configuration of jms on annotations -->
<jms:annotation-driven/>
<!-- =============================================== -->
<!-- JMS Common, Define JMS connectionFactory -->
<!-- =============================================== -->
<!-- Activemq connection factory -->
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!-- brokerURL, You may have different IP or port -->
<constructor-arg index="0" value="tcp://localhost:61616" />
</bean>
<!-- Pooled Spring connection factory -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
</bean>
<!-- ======================================================= -->
<!-- JMS Send, define default destination and JmsTemplate -->
<!-- ======================================================= -->
<!-- Default Destination Queue Definition -->
<bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue">
<!-- name of the queue -->
<constructor-arg index="0" value="Send2Recv" />
</bean>
<!-- JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestination" ref="defaultDestination" />
<property name="deliveryPersistent" value="false"/>
<property name="deliveryMode" value="1"/>
<property name="timeToLive" value="10000"/>
</bean>
<!-- =============================================== -->
<!-- JMS receive, define JmsListenerContainerFactory -->
<!-- =============================================== -->
<bean id="jmsListenerContainerFactory"
class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
<property name="connectionFactory" ref="connectionFactory" />
<property name="concurrency" value="3-10"/>
</bean>
</beans>
Ve yapımcı:
@Component
public class JmsMessageSender {
private final Logger log = Logger.getLogger(JmsMessageSender.class.toString());
@Autowired
private JmsTemplate jmsTemplate;
public void send(final Destination dest, final String text) {
this.jmsTemplate.send(dest, session -> {
Message message = session.createTextMessage(text);
log.info("delivery mode {" + jmsTemplate.getDeliveryMode() + "}, timeToLive {" + jmsTemplate.getTimeToLive() + "}");
return message;
});
}
}
benim konsol günlüğüne bakın gönderirken:
INFO: Established shared JMS Connection: ActiveMQConnection {id=ID:localhost-61129-1458640452010-1:1,clientId=null,started=false}
mar 22, 2016 10:54:12 AM com.app.JmsMessageSender lambda$send$1
INFO: delivery mode {1}, timeToLive {10000}
mar 22, 2016 10:54:12 AM com.app.JmsMessageSender lambda$send$1
INFO: delivery mode {1}, timeToLive {10000}
teslimat modudur anlamına gelir Burada
benim Bahar JMS yapılandırma NONPERSISTENT olarak ayarlayın. Ancak, ActiveMQ WebConsole'u açtığımda - Kalıcı olarak işaretlenmiş iletiler var.Birisi bana nedenini açıklayabilir mi? Bunu nasıl düzeltebilirim?
Bu gerçekten bana yardımcı oldu! Dokümanlardan: 'Bazı JMS sağlayıcıları, ConnectionFactory yapılandırması aracılığıyla varsayılan QOS değerlerinin idari olarak ayarlanmasını sağlar. Bu, MessageProducer'ın gönderme yöntemine yapılan bir çağrının (Hedef varış yeri, İleti iletisi) JMS belirtiminde belirtilen değerlerden farklı QOS varsayılan değerler kullanması sonucunu doğurur. QOS değerlerinin tutarlı bir şekilde yönetilmesini sağlamak için, JmsTemplate, boolean özelliğini isExplicitQosEnabled true olarak ayarlayarak kendi QOS değerlerini kullanması için özel olarak etkinleştirilmelidir. – mlewandowski