多线程环境下使用 RocketMQ 遇到的一个问题

2019-03-12 12:03:13 +08:00
 ClancyH
主线程中通过 DefaultMQPushConsumer 获取数据队列的数据存到一个非堵塞队列中,然后另外一个线程 poll 数据处理,但是运行后发现处理线程处理几条数据之后,一直只有获取数据没有执行数据了。
2054 次点击
所在节点    Java
2 条回复
Malthael
2019-03-12 12:58:10 +08:00
贴代码
ClancyH
2019-03-12 14:05:37 +08:00
发现问题原因了,应该是处理程序挂在通过 Druid 获取数据库连接上了,对应的线程信息

"Thread-0" #10 prio=5 os_prio=0 tid=0x00007fd8d4491000 nid=0x3d0e waiting on condition [0x00007fd89f7e1000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d950b8e0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at com.alibaba.druid.pool.DruidDataSource.takeLast(DruidDataSource.java:1899)
at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1460)
at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1255)
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1235)
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1225)
at com.zzx.wwl.alarm.util.DataBaseUtil.getConnection(DataBaseUtil.java:32)
at com.zzx.wwl.alarm.Start$1.run(Start.java:41)
at java.lang.Thread.run(Thread.java:748)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX