camel 使用_使用Camel从WildFly 8向WebLogic 12发送JMS消息

camel 使用

系统集成是一个很好的挑战。 特别是当您在寻找通信标准和可靠的解决方案时。 在当今的微服务世界中,每个人都在谈论REST服务和基于http的协议。 实际上,对于大多数通常具有更复杂的需求集的大多数企业项目来说,这是远远不够的。 合理的解决方案是基于Java消息服务的集成。 而且,尽管我们不再关注集中式基础架构和ESB,但我们希望为定义的服务进行基于点对点的集成。 让我们看看我们是否可以使其工作并在JBoss WildFly和Oracle WebLogic Server之间发送消息。

业务案例–从Java EE到微服务

情景

但我想先退一步:为什么要有人? 我认为,这种情况背后的主要动机之一是迁移路径缓慢。 从单一的单一平台应用程序一直到最后,我们希望具有足够的灵活性以将那些大型安装中的单个服务封装起来,并使它们作为服务可用。 假设这是可能的,并且旧版应用程序具有不错的设计。 或者我们想提高个性化服务,从技术角度来说。 在这个特定的示例中,我们迫不及待地想将Java EE 7功能引入我们的应用程序,而WebLogic仍然主要停留在EE 6上。我们可以使用REST服务甚至WebServices来做到这一点,但是我们可能想要更多。 这就是JMS规范的来源。

WildFly中的Oracle JMS客户端库

为了在两个不同的服务器之间发送消息,您需要将各个客户端库集成到发送端。 对于WebLogic,这是WebLogic JMS瘦客户端 (wljmsclient.jar)。 与WebLogic Install或Full客户端相比,使用较小的客户端资源提供了Java EE和WebLogic JMS功能,而与Thin T3客户端相比,其提供的客户端资源也较小。 实际上,它包含Java EE JMS API和实现,它们将直接与WildFly提供的实现相冲突。 要使用它们,我们必须将它们打包为一个模块,并在HornetQ中配置一个JMS Bridge来使用它。 首先是添加新模块。 将文件夹更改为wildfly-8.2.0.Final \ modules \ system \ layers \ base,然后创建一个新的文件夹结构:custom \ oracle \ weblogic \ main在其下方。 从此处的%MW_HOME%\ server \ lib文件夹复制wlthint3client.jar。 现在,您必须添加一个模块描述符文件,module.xml:

<module xmlns="urn:jboss:module:2.0" name="custom.oracle.weblogic"><resources><resource-root path="wlthint3client.jar"><filter><exclude-set><path name="javax.ejb"/><path name="javax.ejb.spi"/><path name="javax.transaction"/><path name="javax.jms"/><path name="javax.xml"/><path name="javax.xml.stream"/></exclude-set></filter></resource-root></resources><dependencies><module name="javax.api"/><module name="sun.jdk" export="false" services="import"><exports><include-set><path name="sun/security/acl"/><path name="META-INF/services"/></include-set></exports></module><module name="com.sun.xml.bind" /><module name="org.omg.api"/><module name="javax.ejb.api" export="false"   /><module name="javax.transaction.api"  export="false" /><module name="javax.jms.api"  export="false" /><module name="javax.xml.stream.api" export="false"  /><module name="org.picketbox" optional="true"/><module name="javax.servlet.api" optional="true"/><module name="org.jboss.logging" optional="true"/><module name="org.jboss.as.web" optional="true"/><module name="org.jboss.as.ejb3" optional="true"/><module name="org.hornetq" /></dependencies>
</module>

该文件定义了所有必需的资源和依赖项以及相关的排除项。 如果完成了,我们最终需要消息桥。

HornetQ JMS消息桥

JMS桥的功能是使用来自源JMS目标的消息,并将其发送到目标JMS目标。 通常,源或目标目标位于不同的服务器上。 只要它们兼容JMS 1.1,该桥接器还可用于桥接来自其他非HornetQ JMS服务器的消息。 打开standalone-full.xml并将以下配置添加到消息传递子系统:

<jms-bridge name="wls-bridge" module="custom.oracle.weblogic"><source><connection-factory name="java:/ConnectionFactory"/><destination name="java:/jms/sourceQ"/></source><target><connection-factory name="jms/WFMessagesCF"/><destination name="jms/WFMessages"/><context><property key="java.naming.factory.initial"value="weblogic.jndi.WLInitialContextFactory"/><property key="java.naming.provider.url" value="t3://127.0.0.1:7001"/></context></target><quality-of-service>AT_MOST_ONCE</quality-of-service><failure-retry-interval>2000</failure-retry-interval><max-retries>10</max-retries><max-batch-size>500</max-batch-size><max-batch-time>500</max-batch-time><add-messageID-in-header>true</add-messageID-in-header></jms-bridge>

如您所见,它直接引用模块,并具有源和目标定义。 源是在消息收发子系统中定义的WildFly本地消息队列:

<jms-queue name="sourceQ"><entry name="java:/jms/sourceQ"/></jms-queue>

而目标是在WebLogic Server中定义的远程队列以及连接工厂。 我假设您知道该怎么做,否则请参阅本文档 。 就是这样。 现在,我们需要向本地队列发送一条消息,而该消息将通过网桥发送到WebLogic队列。

测试桥梁–使用骆驼

将消息驱动的bean部署到WebLogic(是的,您必须将其作为ejb jar打包到耳朵中,所有这些)。 这个特定的示例只是将消息文本转储到记录器中。

@MessageDriven(mappedName = "jms/WFMessages", activationConfig = {@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})public class LogMessageBean implements MessageListener {private final static Logger LOGGER = Logger.getLogger(LogMessageBean.class.getName());public LogMessageBean() {}@Overridepublic void onMessage(Message message) {TextMessage text = (TextMessage) message;try {LOGGER.log(Level.INFO, text.getText());} catch (JMSException jmxe) {LOGGER.log(Level.SEVERE, jmxe.getMessage());}}
}

现在,我们需要WildFly服务器上的生产者。 这样做,我实际上正在使用WildFly-Camel JMS集成 。

@Startup
@ApplicationScoped
@ContextName("jms-camel-context")
public class JMSRouteBuilder extends RouteBuilder {@Overridepublic void configure() throws Exception {// Initial Context LookupContext ic = new InitialContext();ConnectionFactory cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");// Create the JMS ComponentJmsComponent component = new JmsComponent();component.setConnectionFactory(cf);getContext().addComponent("jms", component);// Build A JSON GreetingJsonObject text = Json.createObjectBuilder().add("Greeting", "From WildFly 8").build();// Send a Message from timer to Queuefrom("timer://sendJMSMessage?fixedRate=true.=10000").transform(constant(text.toString())).to("jms:queue:sourceQ").log("JMS Message sent");}
}

这就是整个魔术。 计时器将JSON文本消息发送到本地队列,该消息将桥接到WebLogic。

消息传递

更多提示

如果要在没有网桥的情况下测试WebLogic队列,则必须将wljmsclient包含到您的项目中。 由于这在Maven存储库(AFAIK)中不可用,因此您可以简单地在本地安装它:

mvn install:install-file -Dfile=%MW_HOME%/wlserver/server/lib/wlthint3client.jar -DgeneratePom=true -DgroupId=custom.com.oracle -DartifactId=wlthint3client -Dversion=12.1.3 -Dpackaging=jar

另一个重要的事情是,如果您尝试在桥以外的其他范围内使用自定义模块,则会在WildFly上遇到类加载问题。 因此,请密切注意,不要在其他地方使用它。

该网桥配置了较大的故障重试间隔和最大重试次数。 这是一种解决方法。 如果WildFly启动太快,并且网桥在实际配置队列之前尝试访问本地sourceQ,则会导致异常。

  • 在我的GitHub帐户中找到完整的源代码 。

翻译自: https://www.javacodegeeks.com/2015/07/sending-jms-messages-from-wildfly-8-to-weblogic-12-with-camel.html

camel 使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++异常处理控制流下的OLLVM混淆

点击蓝字关注我们来源于网络&#xff0c;侵删Inflated!!!C异常化处理OLLVM-控制流平坦化Two PuzzlesException一般碰到C异常逆向&#xff0c;确定了异常分发、处理部分&#xff0c;直接把call throw改为jmp catch块&#xff0c;再F5即可。PS: 多个catch块根据rdx来当为异常处理…

【微服务】springboot整合kafka-stream使用详解

目录 一、前言 二、kafka stream概述 2.1 什么是kafka stream 2.2 为什么需要kafka stream 2.2.1 对接成本低 2.2.2 节省资源 2.2.3 使用简单 2.3 kafka stream特点 2.4 kafka stream中的一些概念 2.5 Kafka Stream应用场景 三、环境准备 3.1 搭建zk 3.1.1 自定义d…

C语言知识总结一:C语言的基本知识汇总

点击蓝字关注我们来源于网络&#xff0c;侵删C语言是一种计算机程序设计语言。它既有高级语言的特点&#xff0c;又具有汇编语言的特点。它可以作 为系统设计语言&#xff0c;编写工作系统应用程序&#xff0c;也可以作为应用程序设计语言&#xff0c;编写不依赖计算机 硬件的应…

jboss8日志级别设置_罐中研讨会:设置JBoss BPM Suite全日研讨会

jboss8日志级别设置是否在寻找一种简单的方法来宣传&#xff0c;展示或演示JBoss业务流程管理套件&#xff08;BPM Suite&#xff09;产品的入门难度&#xff1f; 别无所求&#xff0c;因为我们已经召集了这个研讨会&#xff0c;因此您可以围绕JBoss BPM Suite构建一个晚上&a…

yapi 接口文档_1分钟docker部署顶尖 API 文档管理系统

YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平台提供的接口数据写入工具以及简单的点击…

微软CTO建议业界弃用C/C++采用Rust,遭C++之父回怼

点击蓝字关注我们来源于网络&#xff0c;侵删近日&#xff0c;Microsoft Azure CTO、Sysinternals 的主要开发者 Mark Russinovich 在其社交账号上发布动态称&#xff0c;开发人员是时候停止使用 C/C 来启动新项目&#xff0c;并建议可在需要使用 non-GC 语言的场景中使用 Rust…

红帽 jboss_红帽峰会2015所需的JBoss BPM内容指南

红帽 jboss明年再见&#xff1f; 今年在Red Hat Summit上&#xff0c;我们在JBoss BRMS和JBoss BPM Suite演讲中获得了很多乐趣。 在DevNation周围也有一些社区会议&#xff0c;重点介绍了使我们的产品成为可能的项目。 您可以在他们的博客上找到此演讲的概述&#xff0c;并…

Python、C、Java 和 C++ 四足鼎立,其他已无胜算? | TIOBE 10 月编程语言排行榜

点击蓝字关注我们来源于网络&#xff0c;侵删技术的千变万化&#xff0c;都是有迹可循的&#xff0c;最新的 TIOBE 十月编程语言榜单重磅发布&#xff0c;快来看看有哪些值得关注的变化吧&#xff01;四大编程语言不断增强其主导地位曾几何时&#xff0c;编程语言界中 Java、C、…

C语言 #define 和 typedef 区别

点击蓝字关注我们来源于网络&#xff0c;侵删在C语言编程中&#xff0c;typedef 和 #define是最常用语句&#xff0c;可能很多工作过几年的工程师都没有去深究过它们的一些用法和区别。typedef的用法在C/C语言中&#xff0c;typedef常用来定义一个标识符及关键字的别名&#xf…

Spring Batch –用JavaConfig替换XML作业配置

最近&#xff0c;我协助一个客户启动并运行了Spring Batch实现。 该团队决定继续使用针对批处理作业的基于JavaConfig的配置&#xff0c;而不是传统的基于XML的配置。 随着这越来越成为配置Java应用程序的一种常用方法&#xff0c;我觉得是时候更新Keyhole的Spring Batch系列了…

sql limit 子句_Java 8流中的常见SQL子句及其等效项

sql limit 子句功能编程允许使用通用语言进行准声明性编程 。 通过使用功能强大的流畅API&#xff08;例如Java 8的Stream API &#xff09;或jOOλ的顺序Stream扩展Seq或更复杂的库&#xff08;例如javaslang或functionaljava&#xff09; &#xff0c;我们可以以一种非常简洁…

C++编程中的核心知识点!

点击蓝字关注我们来源于网络&#xff0c;侵删尊重函数接口&#xff0c;尽量不作内部改动C代码语句分为&#xff1a;内置类型&#xff0c;名字&#xff0c;变量&#xff0c;操作符&#xff0c;标量&#xff0c;字符串&#xff0c;预处理指示&#xff08;如#include&#xff09;等…

C++ 语言的单元测试与代码覆盖率

点击蓝字关注我们来源于网络&#xff0c;侵删前言测试是软件开发过程中一个必须的环节&#xff0c;测试确保软件的质量符合预期。对于工程师自己来说&#xff0c;单元测试也是提升自信心的一种方式。直接交付没有经过测试的代码是不太好的&#xff0c;因为这很可能会浪费整个团…

C++ 模板(Template)总结,长点小知识

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删前言&#xff1a;大家好&#xff0c;今天给大家分享一篇关于 C 模板总结概述.模板&#xff08;Template&#xff09;指 C 程序设计设计语言中采用…

归并排序 java_归并排序(Java实现)

package primary_01;/** 归并排序* 1.算法实现* 2.验证算法的正确性* 3.分析算法的复杂度*/public class Merge_sort {public static void main(String[] args) {int arr [] {2,1,6,5,9,8,2020,199};sort(arr, 0, arr.length-1);for (int i : arr) {System.out.print(i" &…

C++17 常用新特性:带初始化的 if 和 switch 语句

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删早在2016-03-14&#xff0c;Thomas Kppe 在https://wg21.link/p0305r0中就提出了在if和switch使用初始化语句&#xff0c;使用时的代码示例如下&…

四大语言加强统治地位,Rust威胁C/C++

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删TIOBE 公布了 2022 年 10 月的编程语言排行榜。截至今日&#xff0c;Python、Java、C 和 C 语言已经在 TIOBE 榜单的前 4 位盘踞了相当长的一段时…

sql计算留存_SQL无所不能:DBA宝妈宝爸系列分享

原文链接&#xff1a;https://www.modb.pro/db/22315 目前程序从功能上其实已经完全满足客户(当然我这里的客户都是指媳妇儿)需求&#xff0c;具体可参考&#xff1a;使用SQL计算宝宝每次吃奶的时间间隔 - Part1&#xff1a;分析函数的使用使用SQL计算宝宝每次吃奶的时间间隔 -…

对 int 变量赋值的操作是原子的吗?为什么?

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删这个是在面试的时候遇到的问题&#xff0c;当时没有答出来。回到家以后查了查&#xff0c;整理记录下来。原问题&#xff1a;什么指令集支持原子…

C语言知识总结:if-else判断语句和switch-case选择语句

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删1、if-else判断语句一个基本的if语句由一个关键字if开头&#xff0c;跟上在括号&#xff08;&#xff09;里边的是表示逻辑条件的表达式&#xf…