发布于2021-12-28 01:10 阅读(1480) 评论(0) 点赞(17) 收藏(2)
我有一种情况,我需要应用程序将消息发送到消息代理。另一个监听代理的客户端必须从队列中消费消息,确定它们是什么类型的消息,并将消息传递给适当的处理程序。
例如,如果一个Fizz
POJO 被序列化为 JSON,然后发送到代理,另一个进程必须使用它,将它从 JSON 反序列化回一个Fizz
实例,然后知道将其传递Fizz
给FizzHandler
处理器。同一个Buzz
信息:它应该反序列化回一个Buzz
并送至BuzzHandler
等
我相信路线的伪代码应该是这样的:
from(broker)
.unmarshal().json(JsonLibrary.Gson)
.dynamicRouter(someMechanismForDeterminingHandler)
我相信动态路由器是解决这个问题的合适处理器,但我不是 EIP 专家,我可能不适合。
这里有两个大问题:
Fizz
对象,而另一种 JSON 字符串代表一个Buzz
对象?您需要提前知道将某个字符串解组为哪个类。设置数据格式并在您想要解组到 Fizz 的任何地方引用它。Pojo -> JSON 更容易,因为 gson 可以通过查看手头的对象来确定格式。
GsonDataFormat json2Fizz = new GsonDataFormat(Fizz.class);
GsonDataFormat json2Buzz = new GsonDataFormat(Buzz.class);
最好的方法可能是在解组之前进行路由。使用基于内容的路由器,它可以轻松跟踪路由。
如果您在 json 本身中有一些东西可以让您识别 Fizz 或 Buzz,您可以使用表达式语言JsonPath,它允许您直接在 json 字符串上路由/过滤等。如果没有,您可能希望传递一个标头,以某种方式说明您可以路由的消息类型。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/368668/cd64f50558c3fc7ebc63/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!