我使用Oracle Service Bus(OSB)作为MOM,目标URI是IBM MQ队列.我只是想知道哪个是首选的运输工具.OSB为相同的JMS适配器和MQ适配器提供2个适配器以进行传输.有没有人知道什么是PROS和相同的CONS.TIA
我有一个简单的测试用例,我将一个HornetQ服务器(V2.4.7.Final)作为Spring上下文的一部分启动.这非常有效,我可以通过JMS,HornetQ API和/或JMX访问队列.
测试用例应该在启动时清空队列,检查它是否为空,然后向队列添加10条消息.只要此队列中没有使用者,就可以使用管理队列或JMSQueueControl.甚至通过JMX对队列进行一些操作也运行良好.
只要我使用Spring配置向此队列添加消息侦听器 - 并且侦听器按预期使用消息 - 我无法从队列中删除所有消息.既不是通过JMX调用方法,也不是管理队列,也没有JMSQueueControl工作,即方法被无异常调用,但它们没有显示效果.
我想也许我必须在对其内容进行一些修改之前暂停队列,但暂停也不起作用.我可以看到队列是通过JMX暂停的,并且在使用API时报告了相同的消息,但消费者仍然消耗来自队列的消息.因此,我认为它根本没有停顿.
我知道没有源代码很难,但从我的观点来看,这是非常基本的设置,因为你在很多很多教程中都找到了它.任何人都可以建议我做错了什么.如果需要任何源代码,请发表评论,我将添加重要部分.
我正在阅读这两个概念.主要是卡夫卡.并与JMS比较以更好地理解.
Kafka保证订购交付和多个订户.卡夫卡如何实现它?
Kafka有多个分区.如果每个分区有一个消费者,那么我们可以保证订购.我们可以通过多个分区实现负载均衡.所以两者同时是可能的.
在JMS的情况下,如果我们有多个队列,与Kafka不同?
Q1:在这种情况下哪个更好?
Q2:我看起来很狭窄吗?卡夫卡做的不仅仅是这个吗?
请建议我.
即使我对JMS有误,请告诉我.
是什么原因可以激励程序员在分布式Java应用程序中使用Java JMS(Java消息服务)API而不是java.net包的UDP套接字API,或者使用UDP套接字API代替JMS API?如果可能,请举例说明.
我有以下代码来声明队列:
Connection connection = RabbitConnection.getConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(getQueueName(), false, false, false, null);
consumer = new QueueingConsumer(channel);
channel.basicConsume(getQueueName(), true,consumer);
Run Code Online (Sandbox Code Playgroud)
以及以下内容以获取下一个Delivery对象并对其进行处理:
Delivery delivery = null;
T queue = null;
//loop over, continuously retrieving messages
while(true) {
try {
delivery = consumer.nextDelivery();
queue = deserialise(delivery.getBody());
process(queue);
} catch (ShutdownSignalException e) {
logger.warn("Shutodwon signal received.");
break;
} catch (ConsumerCancelledException e) {
logger.warn("Consumer cancelled exception: {}",e.getMessage());
break;
} catch (InterruptedException e) {
logger.warn("Interuption exception: {}", e);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
反序列化代码.如你所见,我正在使用Kryo:
public T deserialise(byte[] …Run Code Online (Sandbox Code Playgroud) 在消耗来自队列的消息时,相对于队列深度n,应用JMS选择器的算法时间复杂度是多少?特别是,每次读取是否为线性(O(n))?它是依赖于实现的(在JMS提供程序上),是否取决于请求的字段?
(如果依赖于实现,我对Websphere MQ和Solace的行为特别感兴趣,但我欢迎处理任何特定JMS提供程序的答案,特别是如果您有描述复杂性的文档的链接!).
动机:每条消息都有两个属性:a invocationID和a batchName.批处理包含多个调用.客户希望以两种方式之一消费消息; 无论是通过invocationID还是通过batchName.在生成消息时,我不知道它们将被消耗的方法.
这可以通过选择器实现:
invocationID=42
Run Code Online (Sandbox Code Playgroud)
要么
batchName="reconciliation"
Run Code Online (Sandbox Code Playgroud)
...我可以通过使用相关ID而不是自定义属性来加快其中一个,但我担心另一个会保持缓慢.
目前,我们在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) 我正在使用Windows 7OS.我apache-activemq-5.8.0.zip从这些链接下载并在C:\Users\Infratab Bangalore\Desktop\Queueing\apache-activemq-5.8.0目录中解压缩.
在Activemq初始化时,我Pre-Installation Requirements从这些链中读取概念.
我已经安装apache-maven-3.0.5在我的系统中.对于我的构造,我在我的系统中运行以下命令.
mvn -version
Run Code Online (Sandbox Code Playgroud)
我收到以下消息,所以Maven安装成功.
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 19:21:
28+0530)
Maven home: P:\Software\apache-maven-3.0.5
Java version: 1.7.0_21, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_21\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"
Run Code Online (Sandbox Code Playgroud)
我geronimo-spec-corba-1.0.jar从这些链接下载并设置classpth.

我Activemq以下面的方式开始初始化.
C:\Users\Infratab Bangalore\Desktop\Queueing\apache-activemq-5.8.0\bin>activemq
Run Code Online (Sandbox Code Playgroud)
我收到错误,所以我测试了是否61616(Activemq default port no) …
我想知道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:"
这个异常的原因是什么?我需要做些什么来摆脱这个?
jms ×10
java ×9
ibm-mq ×2
apache ×1
apache-camel ×1
apache-kafka ×1
hornetq ×1
java-ee ×1
java-ee-7 ×1
memory-leaks ×1
performance ×1
rabbitmq ×1
sockets ×1
spring ×1
udp ×1
weblogic ×1
websocket ×1
wildfly ×1