【发布时间】:2017-04-19 00:08:45
【问题描述】:
我有一个 SpringBoot 应用程序,它使用来自 ActiveMQ 队列的自定义可序列化消息。到目前为止它是有效的,但是消耗率很差,只有 1 - 20 msg/sec。
@JmsListener(destination = "${channel.consumer.destination}", concurrency="${channel.consumer.maxConcurrency}")
public void receive(IMessage message) {
processor.process(message);
}
上面是我的通道消费者类的sn-p,它有一个处理器实例(注入,自动装配,里面我有@Async服务,所以我可以假设主线程将在消息进入@Async方法后立即释放) 并且它还使用我从应用程序属性设置的 springboot activemq 默认 conn 工厂
# ACTIVEMQ (ActiveMQProperties)
spring.activemq.broker-url= tcp://localhost:61616?keepAlive=true
spring.activemq.in-memory=true
spring.activemq.pool.enabled=true
spring.activemq.pool.expiry-timeout=1
spring.activemq.pool.idle-timeout=30000
spring.activemq.pool.max-connections=50
几件值得告知的事情:
1. 我在本地笔记本电脑上运行所有东西(Eclipse、ActiveMQ、MYSQL)
2.在此之前,我也尝试使用配备自定义线程池任务执行器的自定义连接工厂(默认AMQ,池化和缓存),但仍然得到相同的结果。下面是我每 1 秒拍摄并更新一次的快照性能捕获
3. 我还在 JVM Monitor 中注意到使用的堆不断增加
我想知道:
1. 我的步骤有什么错误/遗漏吗?我的消息率什至无法触及数百个
2.注解的@JmsListener方法会执行异步还是同步?
3. 如果可能并支持,如何正确优雅地使用传统的同步接收()和SpringBoot?
谢谢
【问题讨论】:
标签: spring spring-boot jms activemq spring-jms