我用的是spring-data-elasticsearch,我也碰到了,把application.properties里面的日志级别设置成logging.level.root= info,就好了
放到外面,大家很习惯把场景考虑的非常周全,但是,往往是把系统的搞得异常复杂,从来不出问题的客户端,反而因为改动变得复杂,并且导致的结果反而更大的灾难。系统要解耦,事务绑定kafka,量大了最终会堵死你的线程(你.get()
同步的时候,你把网络断了,kafka会等待)。
我推荐的是:
恩 我说的 场景是 我们作为生产者。我想问的是,我们是否要把发送kafka消息的方法,嵌入到本地事物代码的方法中。如果成功的话,事物就提交了,如果失败的话可以抛出异常,事物进行回滚。这样做是否是可行的。
另外我想问的是,我们使用同步.get()是否就可以获得准确的结果,有没有可能同步.get()超时了,我们的代码也不知道消息有没有发送成功?假设我们把发送kafka消息的方法嵌入到本地事物方法中,有没有这种可能在同步.get()时,本地事物超时了?
其实我想问问您这边的方案(一个系统在提交本地事物的过程中,需要把发消息通知其他的系统)。您这边的建议是,我们把发送kafka的代码放到事物的外面,还是放到事物的里面?
通过您之前的回复,我感觉您是比较倾向于,把发送kafka的代码,放到事物外面。不知道我理解是否有偏差,希望大神可以指明方向,谢谢啦。
你这个问题我懵懂吧,kafka不要涉及到业务,kafka消费者客户端保证把这条消息发给业务层,就结束了,不要牵扯到业务。
如果是生产者,如果发送失败,本身就会等待,除非超时过了一定时间,比如超过10分钟,积压等等。这个时候系统会把错误报错打印出来。错误可以通过异步callback()
获得,但无法放事物,同步.get()
可以放事物,也可以捕获到异常,但效率就低了。