我需要队列来强制执行不重复的策略.可能吗?如果是这样,怎么样?(我一直在谷歌搜索几个小时......)
编辑:
ActiveMQSession实现有以下几行:
// transform to our own message format here
ActiveMQMessage msg = ActiveMQMessageTransformation.transformMessage(message, connection);
// Set the message id.
if (msg == message) {
msg.setMessageId(new MessageId(producer.getProducerInfo().getProducerId(), sequenceNumber));
} else {
msg.setMessageId(new MessageId(producer.getProducerInfo().getProducerId(), sequenceNumber));
message.setJMSMessageID(msg.getMessageId().toString());
}
Run Code Online (Sandbox Code Playgroud)
ActiveMQMessageTransformation是可插入的(您可以设置它),但以下if语句是一个相当无可争议的.
任何想法,除了改变他们的代码?
我正在尝试确定用于集群化ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项.我正在执行高容量消息处理,我需要集群以实现高可用性和水平可伸缩性.
这基本上就是我的应用程序所做的... HTTP-> QUEUE-> PROCESS-> DATABASE-> TOPIC
从( "码头:http://0.0.0.0/inbound ").要(" ActiveMQ的:inboundQueue");
from("activemq:inboundQueue?maxConcurrentConsumers = 50").process(decode()).process(transform()).process(validate()).process(saveToDatabase()).to("activemq:topic:ouboundTopic" );
所以,我已经阅读了所有ServiceMix和AcitveMQ集群页面,但我仍然不确定要走哪条路.
我知道我可以使用HA的主/从设置,但这对可伸缩性没有帮助.
我读过有关经纪人的网络,但我不确定这是如何适用的.例如,如果我在群集中的多个节点上部署相同的Camel路由,它们将如何"完全"交互?如果我将HTTP生成器指向一个节点(NodeA),哪些消息将被发送到NodeB?是否在节点A/B之间共享队列/主题...如果是,如何分割或复制消息?另外,外部客户端如何准确地订阅我的"outboundTopic"(并获取所有消息等)?
或者,我一直在想我应该在多个ServiceMix实例之间共享代理.那将是更清洁的,因为只需要管理一组队列/主题,我可以通过添加更多实例来扩展.但是,现在我受限于单个经纪人的可扩展性,我又回到了单点故障......
如果有人能为我澄清权衡......我会很感激.
我使用ActiveMQ作为嵌入式Spring Boot.似乎Broker是通过ActiveMQConnectionFactory创建的.我知道配置代理的方法是使用代理在查询中设置参数.如下所述:http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html
我想设置一些关于DLQ的功能,所以它在destinationPolicy属性中,但属性类型不是简单类型而是复杂类型,如何编写查询参数来禁用DLQ,好吗?
我在几个例子中注意到,使用camel配置activemq的常用方法是使用以下bean.我想知道Spring Boot是否已经默认配置了这些bean.我知道如果activemq jar在类路径上,则会创建一个默认的连接工厂,但是下面的内容呢?
<bean id="jmsConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
<bean id="pooledConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory"
init-method="start" destroy-method="stop">
<property name="maxConnections" value="8"/>
<property name="connectionFactory" ref="jmsConnectionFactory"/>
</bean>
<bean id="jmsConfig"
class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
<property name="concurrentConsumers" value="10"/>
</bean>
<bean id="jms"
class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig"/>
<property name="transacted" value="true"/>
<property name="cacheLevelName" value="CACHE_CONSUMER"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
要么
@Bean
public ActiveMQConnectionFactory getConnectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(brokerURL);
return connectionFactory;
}
@Bean(initMethod = "start", destroyMethod = "stop")
public PooledConnectionFactory getPooledConnectionFactory() {
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
pooledConnectionFactory.setMaxConnections(maxConnections);
pooledConnectionFactory.setConnectionFactory(getConnectionFactory());
return pooledConnectionFactory;
} …Run Code Online (Sandbox Code Playgroud) 我无法理解如何在本地使用ActiveMQ.
假设我有2台机器,需要交换一些消息.
在机器上我启动ActiveMQ代理:
> ~/bin/activemq
Run Code Online (Sandbox Code Playgroud)
并使用类似的东西:
javax.naming.Context ctx = new InitialContext();
TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("connectionFactory");
conn = factory.createTopicConnection();
TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
Topic topic = null;
try{
topic = (Topic)ctx.lookup("MyTopic");
System.out.println("MyTopic was found");
}catch(NameNotFoundException nnfe){
topic = session.createTopic("MyTopic");
System.out.println("MyTopic was created");
}
TextMessage textMessage = session.createTextMessage();
TopicPublisher publisher = session.createPublisher(topic);
conn.start();
textMessage.setText("My topic message number");
publisher.publish(textMessage);
System.out.println("sendMessage2topic");
Run Code Online (Sandbox Code Playgroud)
我在jndi.properties中的位置:
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
Run Code Online (Sandbox Code Playgroud)
但是我应该在另一台机器上创建什么来订阅这个主题?Shoul我在第二台机器上创建第二个本地ActiveMQ代理,以及如何订阅第一台机器上的远程主题???
任何人都可以提供有关如何在新安装的5.5.0版本上启用JMX(可以远程访问)的详细步骤?
我有一个使用SSL传输的activeMQ代理.我有大约10个使用经纪人的消费者.我正在使用camel来配置我的路由.
即使我重新启动了消费者,即使队列中有待处理的消息,它也会经常挂起并且不会消耗新消息.
我开始尝试通过一次尝试复制问题来逐步通过我的消费者来隔离发生这种情况的地方.我终于找到了一个可以重新创建问题的消费者.它会在一段时间后挂起,但是,如果我转到活动的MQ管理控制台并尝试查看队列中的消息,它将再次开始运行.我认为Jetty导致连接发生刷新网页的队列,从而解除了我遇到的一些线程问题.我该怎么调试呢?
谢谢
这是一个非常普遍的问题,我发现很多解决方案在网络上对我不起作用.我宣布:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>3.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.5.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
和码头插件
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是当我发出"mvn jetty:run"时,我继续得到以下异常:
org.springframework.beans.FatalBeanException:未找到命名空间[http://activemq.apache.org/schema/core]的NamespaceHandler类[org.apache.xbean.spring.context.v2.XBeanNamespaceHandler]; 嵌套异常是java.lang.ClassNotFoundException:org.apache.xbean.spring.context.v2.XBeanNamespaceHandler
运行Jetty,ActiveMQ和Spring JMS的正确maven依赖是什么?
我想知道Java Web套接字和JMS(或ActiveMq)之间有什么区别?请让我知道或有任何来源与WebSocket和JMS的比较以及在哪里使用websocket而不是在哪里使用Activemq而不是websocket请.Activemq是JMS的一个实现.Activemq可能使用Web套接字.如果使用Web套接字来传输消息(包含任何类型的数据)而不是Activemq会怎么样?这可能取决于应用程序和要求的类型,如何一般,并让我轻松地决定使用什么,让我有你的想法(我想在两个Web应用程序之间发送消息,简单,快速和轻量级) .
投票给关闭的人:请考虑帮助,至少让一些人得到帮助,知识而不是避免它.
我希望看到已在ActiveMQ队列中排队的消息内容.我打开了web-console.(http:// localhost:8161/admin/queues.jsp)并点击了队列消息的message-id.它在"消息详细信息"窗口中给出了以下错误,而不是给出消息内容.
"javax.jms.JMSException:无法从内容构建正文.可序列化的类不可用于代理.原因:java.lang.ClassNotFoundException:"
这个异常的原因是什么?我需要做些什么来摆脱这个?
activemq-classic ×10
java ×6
apache-camel ×3
jms ×3
spring-boot ×2
java-ee ×1
jetty ×1
jmx ×1
maven ×1
spring ×1
spring-jms ×1
websocket ×1