有没有办法运行只能在本地检测到的环回JMS适配器?
我不知道如果我的术语是正确的,但我想ActiveMQ代理仅是从代理运行在同一台机器可接.
我是使用ActiveMQ和C#的初学者.我用一个按钮和一个标签创建了一个简单的窗体.当我点击按钮时,我会向队列发送一条消息,并使用我刚刚发送的消息初始化标签.当然,我可以直接初始化我的标签,但我希望我的表单更愿意使用队列中的消息来更新我的标签.
问题是我无法以相同的形式处理消息来更新我的标签.我的消费者代码根本没有调用,但它在我的表单的Load事件中初始化.这是代码
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
InitializeHandlerAMQ();
}
private void InitializeHandlerAMQ()
{
Tchat tchat = null;
IDestination dest = _session.GetQueue(QUEUE_DESTINATION);
using(IMessageConsumer consumer = _session.CreateConsumer(dest))
{
IMessage message;
while((message = consumer.Receive(TimeSpan.FromMilliseconds(2000))) != null)
{
var objectMessage = message as IObjectMessage;
if(objectMessage != null)
{
tchat = objectMessage.Body as Tchat;
if (tchat != null)
{
textBox2.Text += string.Format("{0}{1}", tchat.Message, Environment.NewLine);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我关闭我的窗体并重新启动它,那么我的标签已更新,但我不想关闭它并重新打开它.
你有什么想法吗?
我环顾四周,找不到我想弄清楚的答案的好答案.
在我的系统中,我在运行时创建主题,其中有一个使用者和单个生产者用于在运行时创建的主题.我想要输入的是,在运行时创建主题的设计是否违背了JMS设计?
我这样做是因为它向市场提供数据,每个主题都是具有特定股票订阅的数据源,以及每秒库存更新多少报价的可变率.
我无法弄清楚的是,如果我采用这种方法,我希望能够在运行时创建的Feed主题上不再有任何消费者时删除该主题.我如何通过收到关于主题的消费者数量的通知来弄清楚如何停止发布者并删除主题?
希望这不会影响我的声誉,我认为这是一个有效的问题.我查看了activemq中的虚拟主题,但这似乎不适合这个用例.
我知道db-xx.log是日志文件而db.redo是参考文件?
db-xx.log存储尚未使用的消息.消费后,这些消息将从db-xx.log中删除.db.redo按消息ID存储消息的引用(存储在db-xx.log中).
我的理解是代理首先将消息存储在缓存(易失性存储器)中,然后在检查点或缓存大小已满时将这些消息移动(附加)到db-xx.log.
谢谢
ActiveMQ 5.5.1
<c:route>
<c:from uri="jetty:http://0.0.0.0:8055/ws/despacho" />
<c:to uri="bean:despachoHandler" />
<c:to uri="activemq:queue:copom.out.test" pattern="InOut" />
</c:route>
Run Code Online (Sandbox Code Playgroud)
消息显示排队,但我无法使用它.一段时间后,我得到超时,消息转到ActiveMQ.DLQ.
org.apache.camel.ExchangeTimedOutException:未收到OUT消息:20000毫秒到期回复消息,其中relatedID:Camel-ID-SSP-SGPF-GITSAD-58215-1359134232568-0-3未收到.
如果我将其更改为pattern ="InOnly",我可以正常使用该消息.
这是怎么回事?
我正在使用一个新的ActiveMQ 5.8.0安装,我在队列中有一条名为'testing'的消息.我还替换了ACTIVEMQ_SUNJMX线bin/activemq以启用JMX:
ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
Run Code Online (Sandbox Code Playgroud)
然后我通过以下代码查询JMX:
try {
JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"));
connector.connect();
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Broker");
BrokerViewMBean mbean = MBeanServerInvocationHandler.newProxyInstance(connection, mbeanName, BrokerViewMBean.class, true);
System.out.println("Id:" + mbean.getBrokerId()); // here the exception will be thrown
}
catch (Exception x) {
x.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
访问mbean时抛出异常.
java.lang.reflect.UndeclaredThrowableException
at $Proxy0.getBrokerId(Unknown Source)
at testing.TestJmx.main(TestJmx.java:25)
Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Broker
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643)
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:668)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1424)
at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:89)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1292)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1380)
at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:621)
at sun.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 我们目前将JMS API与ActiveMQ代理一起使用,希望移至RabbitMQ。与openWire和amqp相比,使用java client-producer可以获得最佳性能。我找不到关于amqp(RabbitMQ)与openwire(activeMQ)本机协议的比较研究。我正在寻找原始性能和易于扩展性。
当前,我们将Spring Integration用于ActiveMQ,我想知道即使使用Spring Integration,将其迁移到RabbitMQ(AMQP)是否进行了重大更改。是否有与ActiveMQ用于执行JMS <-> AMQP转发的桥相似的桥?
我在调试语句之下,我的消息监听器没有消耗任何消息.
22:25:17.870 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DEBUG oaactivemq.ActiveMQMessageConsumer - ID:消费-1401814509338-1:1:1:1接收过期的消息:MessageDispatch {commandId = 0,responseRequired =假,consumerId = ID:消费-1401814509338-1:1:1:1,目的地=主题://Topic.ALL,消息= ActiveMQTextMessage {commandId = 23284887,responseRequired =假,MESSAGEID = ID:PROC-1398663597609-0: 1:1:1:23284883,originalDestination = null,originalTransactionId = null,producerId = ID:PROC-1398663597609-0:1:1:1,destination = topic://Topic.ALL,transactionId = null,expiration = 1401814515925,时间戳= 1401814514925,到达= 0,brokerInTime = 1401814514934,brokerOutTime = 1401814514934,的correlationID = NULL,的replyTo = NULL,持久=假,类型= NULL,优先权= 4,组ID = NULL,groupSequence = 0,targetConsumerId = NULL,压缩=假的,用户ID = NULL,内容= org.apache.activemq.util.ByteSequence@2fec90f6,marshalledProperties = org.apache.activemq.util.ByteSequence@62a08837,dataStructure = null,redeliveryCounter = 0,size = 0,properties = {_ componentid = _EPSYNC_READWRITE,_attributename = networkAddress,_operation = Update,_oid = 51e8e5c3e4b0cc716bff43cc,_type = NodeServer,_eventtype = attribute ,_repository = qdb,_ …
在我的XPages项目中,我想使用名为ActiveMQ的第三方Java库.在Domino Designer中,我将包含所有类的jar文件添加到构建路径中.使用我自己的Java代码(而不是Java代理)中的类可以工作,我可以构建XPages应用程序而不会出现任何错误.
但是,当我尝试在XPage上运行我的Java函数时,我得到一个UnsupportedClassVersionError:
java.lang.UnsupportedClassVersionError:JVMCFRE003糟糕的主要版本; Class = org/apache/activemq/ActiveMQSslConnectionFactory,Offset = 6
然后是NoClassDefFoundError:
java.lang.NoClassDefFoundError:org/apache/activemq/ActiveMQSslConnectionFactory
这可能只是由于第一个错误而发生的后续错误(如果我错了,请纠正我).
UnsupportedClassVersionError建议使用比Domino服务器(Domino 9.0.1 FP4)上使用的Java版本更高的Java版本构建第三方库.执行System.getProperty("java.version")返回1.6.0(= Java 6).根据发行说明,第三方Java库(ActiveMQ 5.8.0)已经" 使用jdk6编译并使用jdk7进行验证".
任何人都可以告诉我为什么我得到这个错误,即使该库是使用我用来运行我的代码的相同Java版本构建的?
PS:java -version在服务器计算机的命令行中执行将返回Java版本1.7.0,因为该计算机上已安装了另外的JRE7.然而,在XPage上执行"应该"重要的版本是Domino JVM的版本(1.6.0).我还是想提一下......
activemq-classic lotus-domino xpages domino-designer-eclipse
Spring Boot JMS Topic无法正常工作,其行为类似于队列。
样例代码
应用
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
JMSConfig
@Configuration
@EnableJms
public class JMSConfig {
private static final String JMS_BROKER_URL = "vm://embedded?broker.persistent=false,useShutdownHook=false";
public static final String JMS_TOPIC_MAIL = "mailbox.topic";
@Bean
// Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
@Bean
public ActiveMQConnectionFactory amqConnectionFactory() {
return new ActiveMQConnectionFactory(JMS_BROKER_URL);
}
@Bean
public CachingConnectionFactory connectionFactory() …Run Code Online (Sandbox Code Playgroud) activemq-classic ×10
jms ×4
java ×3
spring-jms ×3
spring ×2
amqp ×1
apache-camel ×1
c# ×1
exception ×1
java-ee ×1
jmx ×1
kahadb ×1
loopback ×1
lotus-domino ×1
rabbitmq ×1
spring-boot ×1
xpages ×1