我已经使用ActiveMQ作为代理和JMS来接收异步。队列中的消息会在消息进入队列后立即开始使用这些消息。 为此我有书面的生产者和消费者代码。 一切工作正常,但整个过程花费过多时间大约2-3分钟10000条记录(我只用于模拟回路) 下面是整个代码:JMS生产者和消费者花费太多时间。为什么?
这是JMS监制:
public class JmsMessageProducer
{
public void jmsListener(String obj) throws Exception
{
BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)"));
broker.start();
Connection connection = null;
Session session = null;
MessageProducer producer = null;
try
{
long millis = System.currentTimeMillis() % 1000;
// Producer
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
connection = connectionFactory.createConnection();
session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("customerQueue3");
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(new ConsumerMessageListener("Consumer3"));
connection.start();
producer = session.createProducer(queue);
for(int i=0; i<10000; i++)
{
String payload = "Important Task"+i;
Message msg = session.createTextMessage(payload);
System.out.println("Sending text '" + payload + "'");
producer.send(msg);
}
long millis2 = System.currentTimeMillis() % 1000;
long millis3 = millis2- millis;
System.out.println("time taken: "+ millis3);
}
finally
{
if(producer != null)
{
producer.close();
}
if (session != null)
{
session.close();
}
if (connection != null)
{
connection.close();
}
broker.stop();
}
}
}
这是监听器代码:
public class ConsumerMessageListener implements MessageListener
{
private String consumerName;
public ConsumerMessageListener(String consumerName)
{
this.consumerName = consumerName;
}
DummyAdapter adapter = new DummyAdapter();
public void onMessage(Message message)
{
TextMessage textMessage = (TextMessage) message;
try
{
System.out.println(consumerName + " received "+ textMessage.getText());
// adapter.dummy(textMessage.getText());
}
catch (JMSException e)
{
e.printStackTrace();
}
}
}
我这样做的第一次。 谁能告诉我为什么这个过程花费了太多时间? 我在做什么错?
感谢您回复javaguy。我按照你的建议更新了我的代码(正如你在我的问题中看到的那样),但它仍然需要很长时间。你能提出其他建议吗? – RishiPandey
您期待的SLA是什么? – developer
我只想知道处理大约80条消息/秒是否好?消费后也没有任何操作。如果在队列中消费消息之后添加更多任务,比如插入数据库或某些业务操作,该怎么办? – RishiPandey