任何人都可以提供有关如何在新安装的5.5.0版本上启用JMX(可以远程访问)的详细步骤?
我想创建一个java类,其唯一目的是检查ActiveMQ代理的状态(或连接到ActiveMQ代理,因为中断可能被定义为客户端也失去网络连接).
所以基本上会有一个线程在每隔几秒钟后运行以检查代理的状态,如果有经纪人关闭,我想做一些特定的邮件支持组和类似的任务.
在线示例不够详细,无法解释如何实现上述目标.
有人已经做过这个,或者可以建议一个很好的方法来实现这一点?
谢谢,Neeraj
我有一个使用SSL传输的activeMQ代理.我有大约10个使用经纪人的消费者.我正在使用camel来配置我的路由.
即使我重新启动了消费者,即使队列中有待处理的消息,它也会经常挂起并且不会消耗新消息.
我开始尝试通过一次尝试复制问题来逐步通过我的消费者来隔离发生这种情况的地方.我终于找到了一个可以重新创建问题的消费者.它会在一段时间后挂起,但是,如果我转到活动的MQ管理控制台并尝试查看队列中的消息,它将再次开始运行.我认为Jetty导致连接发生刷新网页的队列,从而解除了我遇到的一些线程问题.我该怎么调试呢?
谢谢
我们对AMQ使用以下配置
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${brokerURL1}"/>
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="maxConnections" value="10"/>
<property name="maximumActive" value="100"/>
<property name="connectionFactory" ref="jmsConnectionFactory"/>
</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="5"/>
<property name="maxConcurrentConsumers" value="10"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我经常有一个奇怪的问题 - 松散的信息.实际上AMQ表示一切正常并且消息已经出列但是应用程序上没有消息...
我已经读过它可能是缓存消费者的问题,而应该在配置后使用JmsConfiguration
<bean id="jmsConfig" class="org.apache.activemq.camel.component.ActiveMQConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
<property name="transacted" value="false"/>
<property name="concurrentConsumers" value="5"/>
<property name="maxConcurrentConsumers" value="10"/>
<property name="cacheLevelName" value="CACHE_CONSUMER"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何正确配置activemq?哪些值应设置为最佳性能和良好的可靠性?
<property name="maxConnections" value="?"/>
<property name="maximumActive" value="?"/>
<property name="concurrentConsumers" value="?"/>
<property name="maxConcurrentConsumers" value="?"/> …Run Code Online (Sandbox Code Playgroud) 这是一个非常普遍的问题,我发现很多解决方案在网络上对我不起作用.我宣布:
<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依赖是什么?
目前,我们在ActiveMQ库之上使用一些自定义代码来进行JMS消息传递.我一直在寻求切换到Camel,易于使用,易于维护和可靠性.
使用我目前的配置,Camel的ActiveMQ实现比我们的旧实现要慢得多,无论是发送和接收的每条消息的延迟,还是发送和接收大量消息所花费的时间.我试过调整一些配置(例如最大连接),但无济于事.
我有两个应用程序,一个使用我们的旧实现,一个使用Camel实现.每个应用程序都将JMS消息发送到本地ActiveMQ服务器上的主题,并且还侦听有关该主题的消息.这用于测试两个场景: - 在循环中向主题发送100,000条消息,并查看从开始发送到结束处理所有这些消息所需的时间. - 每100毫秒发送一条消息,并测量从发送到处理每条消息的延迟(以ns为单位).
我是否可以根据发送到消息洪流的时间和个别消息的时间来改进下面的实现?理想情况下,改进将涉及调整我错过的一些配置,或建议更好的方法来做,而不是太hacky.将会赞赏对改进的解释.
编辑:既然我是异步发送消息,我似乎有一个并发问题.receivedCount没有达到100,000.查看ActiveMQ Web界面,排队100,000条消息,排队100,000条,因此消息处理方面可能存在问题.我已经改成receivedCount了一个AtomicInteger并添加了一些日志来帮助调试.这可能是Camel本身(或ActiveMQ组件)的问题,还是消息处理代码有问题?据我所知,只有~99,876条消息正在通过floodProcessor.process.
编辑:更新了异步发送和记录并发问题.
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.camel.component.ActiveMQComponent;
import org.apache.activemq.pool.PooledConnectionFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsConfiguration;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.log4j.Logger;
public class CamelJmsTest{
private static final Logger logger = Logger.getLogger(CamelJmsTest.class);
private static final boolean flood = true;
private static final int NUM_MESSAGES …Run Code Online (Sandbox Code Playgroud) 我想知道Java Web套接字和JMS(或ActiveMq)之间有什么区别?请让我知道或有任何来源与WebSocket和JMS的比较以及在哪里使用websocket而不是在哪里使用Activemq而不是websocket请.Activemq是JMS的一个实现.Activemq可能使用Web套接字.如果使用Web套接字来传输消息(包含任何类型的数据)而不是Activemq会怎么样?这可能取决于应用程序和要求的类型,如何一般,并让我轻松地决定使用什么,让我有你的想法(我想在两个Web应用程序之间发送消息,简单,快速和轻量级) .
投票给关闭的人:请考虑帮助,至少让一些人得到帮助,知识而不是避免它.
尝试使用BrokerFactory创建ActiveMQ代理时出现此错误:
java.io.IOException: Could not load failover factory:java.io.IOException: Could not find factory class for resource: META-INF/services/org/apache/activemq/broker/failover
at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:27)
at org.apache.activemq.broker.BrokerFactory.createBrokerFactoryHandler(BrokerFactory.java:43)
at org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:70)
at org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)
at ...
Caused by: java.io.IOException: Could not find factory class for resource: META-INF/services/org/apache/activemq/broker/failover
at org.apache.activemq.util.FactoryFinder$StandaloneObjectFactory.loadProperties(FactoryFinder.java:96)
at org.apache.activemq.util.FactoryFinder$StandaloneObjectFactory.create(FactoryFinder.java:58)
at org.apache.activemq.util.FactoryFinder.newInstance(FactoryFinder.java:146)
at org.apache.activemq.broker.BrokerFactory.createBrokerFactoryHandler(BrokerFactory.java:41)
... 5 more
Run Code Online (Sandbox Code Playgroud)
它似乎是路径错误或类似的东西,我只是无法找出根本原因.
这是导致它的代码:
URI brokerUri = new URI(bean.getBrokerConfigUrl());
broker = BrokerFactory.createBroker(brokerUri);
Run Code Online (Sandbox Code Playgroud)
这是我打电话的网址:
failover:(tcp://internalUrl.net:port#,tcp://internalUrl.net:port#)?randomize=false&timeout=30000&jms.redeliveryPolicy.maximumRedeliveries=-1&jms.prefetchPolicy.all=0
Run Code Online (Sandbox Code Playgroud)
这可能是一个路径错误吗?我不包括一个必需的罐子吗?网址格式不正确吗?我迷失在这里.
编辑:添加赏金
我正在尝试启动ActiveMQ 5.11,我看到WARNING如下:
WARN | Transport Connection to: tcp://127.0.0.1:40890 failed: java.io.EOFException
Run Code Online (Sandbox Code Playgroud)
我activemq.xml的如下:
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:${JMS_PORT}" />
<transportConnector name="stomp" uri="stomp://0.0.0.0:${JMS_STOMP_PORT}"/>
<transportConnector name="ssl" uri="ssl://0.0.0.0:${JMS_SSL_PORT}"/>
</transportConnectors>
<sslContext>
<sslContext
keyStore="file:${JMS_KEY_STORE}"
keyStorePassword="${JMS_KEY_STORE_PASSWORD}"
trustStore="file:${JMS_TRUST_STORE}"
trustStorePassword="${JMS_TRUST_STORE_PASSWORD}"
/>
</sslContext>
<networkConnectors>
<networkConnector
name="host1 and host2"
uri="static://(${JMS_X_SITE_CSV_URL})?wireFormat=ssl&wireFormat.maxInactivityDuration=30000"
dynamicOnly="true"
suppressDuplicateQueueSubscriptions = "true"
networkTTL="1"
/>
</networkConnectors>
Run Code Online (Sandbox Code Playgroud)
这是整个控制台日志.
Java Runtime: Oracle Corporation 1.7.0_05 /usr/java/jdk1.7.0_05/jre
Heap sizes: current=1004928k free=994439k max=1004928k
JVM args: -Xmx1G -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/home/dragon/activemq/conf/login.config -Dcom.sun.management.jmxremote -Djava.io.tmpdir=/home/dragon/activemq/tmp -Dactivemq.classpath=/home/dragon/activemq/conf; -Dactivemq.home=/home/dragon/activemq -Dactivemq.base=/home/dragon/activemq -Dactivemq.conf=/home/dragon/activemq/conf -Dactivemq.data=/home/dragon/activemq/data
Extensions classpath:
[/home/dragon/activemq/lib,/home/dragon/activemq/lib/camel,/home/dragon/activemq/lib/optional,/home/dragon/activemq/lib/web,/home/dragon/activemq/lib/extra]
ACTIVEMQ_HOME: /home/dragon/activemq
ACTIVEMQ_BASE: /home/dragon/activemq …Run Code Online (Sandbox Code Playgroud) 我希望看到已在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
java-ee ×2
broker ×1
eclipse ×1
jar ×1
jetty ×1
jmx ×1
maven ×1
pathing ×1
performance ×1
spring ×1
spring-jms ×1
websocket ×1