带有大数据的 Oracle 服务总线
Oracle service bus with BigData
我没有太多使用 Oracle Service Bus 的经验,我正在尝试使用 BigData 设计一个日志记录解决方案。
据我所知,OSB 中的默认日志和报告 activity 会将数据放入域的服务器日志文件或我们设置服务器域的数据库中。如果我想把所有的日志放到一个单独的 BigData 数据库中。我将需要以下任一方法:
- Javacallout,使用JMS或其他技术向大数据服务器发送数据。
- Web 服务标注,创建一个单独的 Web 服务来处理日志记录。
- 创建自定义报告提供程序以替换 OSB 报告中的默认报告提供程序。
- 其他
请告诉我应该使用什么方法,如果可以请提供您的理由,非常感谢。
weblogic中的日志框架不是基于Log4j的吗?这意味着您可以使用 JMSAppender(如果可以的话,可能谨慎地包装在 Async log4j appender 中)并根据需要进行处理。
或者,如果您谈论的是 OSB 报告框架,则有几个选项:
- 配置默认值 JMS reporting provider(它使用底层 SOAINFRA 数据库,希望它被设置为比默认 Derby 实例更好的数据库),然后编写一个 MDB,从队列中提取报告并将其插入到SAS 大数据
- 关闭 JMS 提供程序并使用 custom provider,它可以做任何您想做的事情。如果需要,您仍然可以执行一个两步过程,其中报告提供者本身将报告放在 JMS 队列中,以便它 returns 快速,并且不同的 MDB 提取消息并按照自己的节奏持久化它们。
我不推荐中间没有异步步骤的 Web 服务或数据库标注,因为您需要非常快速的日志记录和报告,并在尽可能短的时间内使用尽可能少的资源。
您不希望在遇到负载时记录占用线程。我已经看到整条总线因为一个小问题而宕机,因为日志数据库遇到了性能问题,这导致一堆打开的线程试图记录到它,这导致线程饥饿或超时,这导致更多的错误记录......
如果您有像 JMS 队列这样的缓冲区,那么您可以通过提前计划来处理高峰。你可以说 "actually I want a JMS queue of 10,000 messages, and if that overflows due to whatever reason, I want to (push the overflow to a separate queue over on this other box) or (filter out all the non-essential messages) or (throw new messages away) or (action of your choice). Oh yeah, and if the logging database fails then I will try 3 times to commit and if not, move it to this other queue"。或者任何你想要的。
有多种方法可以实现这一点。您可以使用报告 activity 推送到 JMS 或使用日志 activity。
您还可以编写 OSB 组件的小例程 such as this (either on OSB or outside it), that can read anything that you are logging (such as via the log activity but also additional metadata that is logged when you turn on monitoring)并根据需要使用它(例如将其推送到数据库或 BigData 存储)。
关键是避免在每个 pipeline/flow 中编写显式服务调用,并且上述方法使用 standard OSB/ODL* loggers
*Oracle 诊断日志记录
我没有太多使用 Oracle Service Bus 的经验,我正在尝试使用 BigData 设计一个日志记录解决方案。
据我所知,OSB 中的默认日志和报告 activity 会将数据放入域的服务器日志文件或我们设置服务器域的数据库中。如果我想把所有的日志放到一个单独的 BigData 数据库中。我将需要以下任一方法:
- Javacallout,使用JMS或其他技术向大数据服务器发送数据。
- Web 服务标注,创建一个单独的 Web 服务来处理日志记录。
- 创建自定义报告提供程序以替换 OSB 报告中的默认报告提供程序。
- 其他
请告诉我应该使用什么方法,如果可以请提供您的理由,非常感谢。
weblogic中的日志框架不是基于Log4j的吗?这意味着您可以使用 JMSAppender(如果可以的话,可能谨慎地包装在 Async log4j appender 中)并根据需要进行处理。
或者,如果您谈论的是 OSB 报告框架,则有几个选项:
- 配置默认值 JMS reporting provider(它使用底层 SOAINFRA 数据库,希望它被设置为比默认 Derby 实例更好的数据库),然后编写一个 MDB,从队列中提取报告并将其插入到SAS 大数据
- 关闭 JMS 提供程序并使用 custom provider,它可以做任何您想做的事情。如果需要,您仍然可以执行一个两步过程,其中报告提供者本身将报告放在 JMS 队列中,以便它 returns 快速,并且不同的 MDB 提取消息并按照自己的节奏持久化它们。
我不推荐中间没有异步步骤的 Web 服务或数据库标注,因为您需要非常快速的日志记录和报告,并在尽可能短的时间内使用尽可能少的资源。
您不希望在遇到负载时记录占用线程。我已经看到整条总线因为一个小问题而宕机,因为日志数据库遇到了性能问题,这导致一堆打开的线程试图记录到它,这导致线程饥饿或超时,这导致更多的错误记录......
如果您有像 JMS 队列这样的缓冲区,那么您可以通过提前计划来处理高峰。你可以说 "actually I want a JMS queue of 10,000 messages, and if that overflows due to whatever reason, I want to (push the overflow to a separate queue over on this other box) or (filter out all the non-essential messages) or (throw new messages away) or (action of your choice). Oh yeah, and if the logging database fails then I will try 3 times to commit and if not, move it to this other queue"。或者任何你想要的。
有多种方法可以实现这一点。您可以使用报告 activity 推送到 JMS 或使用日志 activity。
您还可以编写 OSB 组件的小例程 such as this (either on OSB or outside it), that can read anything that you are logging (such as via the log activity but also additional metadata that is logged when you turn on monitoring)并根据需要使用它(例如将其推送到数据库或 BigData 存储)。
关键是避免在每个 pipeline/flow 中编写显式服务调用,并且上述方法使用 standard OSB/ODL* loggers
*Oracle 诊断日志记录