NewLifeX / NewLife.RocketMQ

纯托管轻量级RocketMQ客户端,支持发布消息、消费消息、负载均衡等核心功能!
MIT License
212 stars 79 forks source link

consumer.Start();出现问题 #41

Closed sorrrrrry closed 2 years ago

sorrrrrry commented 2 years ago

微信截图_20211209175813

System.AggregateException HResult=0x80131500 Message=One or more errors occurred. (A task was canceled.) Source=System.Private.CoreLib StackTrace: at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() at NewLife.RocketMQ.ClusterClient.Invoke(RequestCode request, Object body, Object extFields, Boolean ignoreError) at NewLife.RocketMQ.NameClient.GetRouteInfo(String topic) at NewLife.RocketMQ.Client.MqBase.Start() at NewLife.RocketMQ.Consumer.Start() at MQConsumer.Program.Main(String[] args) in C:\Users\lenovo\Downloads\RocketMQTest-main\MQConsumer\Program.cs:line 39

内部异常 1: TaskCanceledException: A task was canceled.

@hipeace86 @annuo1111 你好,麻烦请问一下为什么会出现这种问题,十分感谢。

nnhy commented 2 years ago

连接超时,连不上

shiayoung commented 2 years ago

连接超时,连不上

请问连不上有超时时间可以设置吗?或者可以有一个可能传递 Cancelled 信息的参数,连不上会一直占用线程池的资源。

nnhy commented 2 years ago

这个超时,是客户端连接不上名称服务器,一般不需要配置超时时间,如果服务端启动并且地址正确没有防火墙,一般很短时间内返回。如果超时了,哪怕1秒超时,都可能是服务端没对或者网络问题。 所以,查一查能否telnet你的服务端地址

shiayoung commented 2 years ago

这个超时,是客户端连接不上名称服务器,一般不需要配置超时时间,如果服务端启动并且地址正确没有防火墙,一般很短时间内返回。如果超时了,哪怕1秒超时,都可能是服务端没对或者网络问题。 所以,查一查能否telnet你的服务端地址

地址没问题,是对应的 Topic 没有创建也会导致。没法控制用户 Topic 填啥,所以如果没法快速失败,确实有可能会影响到其它任务。

16:17:46.953 81 N T System.AggregateException: One or more errors occurred. ([Name]集群所有地址连接失败!)
 ---> NewLife.XException: [Name]集群所有地址连接失败!
   at NewLife.RocketMQ.ClusterClient.EnsureCreate()
   at NewLife.RocketMQ.ClusterClient.SendAsync(Command cmd)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at NewLife.RocketMQ.ClusterClient.Invoke(RequestCode request, Object body, Object extFields, Boolean ignoreError)
   at NewLife.RocketMQ.NameClient.GetRouteInfo(String topic)
   at NewLife.RocketMQ.NameClient.DoWork(Object state)
   at NewLife.Threading.TimerScheduler.Execute(Object state)
16:17:46.953 81 N T 任务 [6]NameClient.DoWork (30000ms) 耗时过长 192,511ms,建议使用异步任务Async=true
nnhy commented 2 years ago

如果对应的Topic不存在,则需要使用默认Topic连上去,然后创建新的Topic

nnhy commented 2 years ago

阿里云目前需要在Topic前面带上实例ID并用【%】连接,组成路由Topic[用来路由到实例Topic]。 fix #24 fix#35 … · NewLifeX/NewLife.RocketMQ@33e58a6 https://github.com/NewLifeX/NewLife.RocketMQ/commit/33e58a6b727f88482b159f5e532864a6591b2a5e