Spring与网关的集成

这是有关Spring Integration系列的第二篇文章。 本文以我们介绍Spring Integration的第一篇文章为基础。

上下文设置

在第一篇文章中,我们创建了一个简单的Java应用程序,其中

  1. 通过频道发送了一条消息,
  2. 它被服务(即POJO)拦截并进行了修改。
  3. 然后通过另一个渠道发送
  4. 从通道读取并显示修改后的消息。

但是,在执行此操作时(请记住,我们只是在此处介绍概念),我们在应用程序中编写了一些特定于Spring的代码,即测试类。 在本文中,我们将解决这个问题,并使我们的应用程序代码与Spring Integration api尽可能隔离。

这是通过Spring Integration称为gateways来完成的 。 存在网关的唯一目的是将消息传递相关的“管道”代码从“业务”代码中抽象出来。 业务逻辑可能实际上并不在乎是通过通道发送消息还是通过进行SOAP调用来实现功能。 到目前为止,这种抽象虽然合乎逻辑且合乎需要,但并非十分实用。

此时可能值得快速浏览一下《 Spring Integration参考手册》 。 但是,如果您刚刚开始使用Spring Integration,那么暂时最好阅读本文。 我建议您先洗手,然后再返回参考手册,该手册非常好,但也非常详尽,因此对于初学者来说可能不胜枚举。

网关可以是带有批注的POJO(这很方便,但在我看来却超出了整个目的)或具有XML配置(如果未经检查,它很快会变成任何体面大小的应用程序的噩梦)。 归根结底,这确实是您的选择,但是我喜欢走XML路线。 两种样式的配置选项在参考实现的本节中详细介绍。

Spring与网关的集成

因此,让我们为HelloWorld服务创建另一个带有网关抛出的测试(有关更多上下文,请参阅本系列的第一篇文章 )。 让我们从测试的Spring配置开始。
文件:src / test / resources / org / academy / integration / HelloWorld1Test-context.xml

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:p='http://www.springframework.org/schema/p'xmlns:int='http://www.springframework.org/schema/integration'xsi:schemaLocation='http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/integration 
http://www.springframework.org/schema/integration/spring-integration-2.1.xsd'><int:channel id='inputChannel'></int:channel><int:channel id='outputChannel'><int:queue capacity='10' /></int:channel><int:service-activator input-channel='inputChannel'output-channel='outputChannel' ref='helloService' method='greet' /><bean id='helloService' class='org.academy.integration.HelloWorld' /><int:gateway service-interface='org.academy.integration.Greetings'default-request-channel='inputChannel' default-reply-channel='outputChannel'></int:gateway></beans>

在这种情况下,所有不同之处在于我们添加了一个网关。 这是一个称为org.academy.integration.Greetings的接口。 它与“ inputChannel”和“ outputChannel”交互,分别发送和读取消息。 让我们编写界面。

文件:/src/main/java/org/academy/integration/Greetings.java

package org.academy.integration;public interface Greetings {public void send(String message);public String receive();}

然后,我们添加此接口的实现。 等待。 没有实现。 而且我们不需要任何实现。 Spring使用一种名为GatewayProxyFactoryBean的东西向该网关注入一些基本代码,从而使它可以读取基于字符串的简单消息,而无需我们做任何事情。 那就对了。 没事

注–假设您不是在使用Spring Integration框架只是推敲字符串, 就需要为大多数生产方案添加更多代码 。 因此,不要习惯免费午餐。 但是,尽管它在这里,让我们深入研究。

现在,让我们使用网关编写一个新的测试类(并且完全不与通道和消息进行交互)。
文件:/src/test/java/org/academy/integration/HelloWorld1Test.java

package org.academy.integration;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class HelloWorld1Test {private final static Logger logger = LoggerFactory.getLogger(HelloWorld1Test.class);@AutowiredGreetings greetings;@Testpublic void test() {greetings.send('World');assertEquals(greetings.receive(), 'Hello World');logger.debug('Spring Integration with gateways.');}}

现在我们的测试班要干净得多。 它根本不了解频道,消息或与Spring Integration相关的任何信息。 它只知道一个问候实例(通过.send()方法向其提供一些数据),并通过.receive()方法获取修改后的数据。 因此, 业务逻辑忽略了管道逻辑 ,从而使代码更加简洁。

现在,只需键入“ mvn -e clean install”(或使用m2e插件),您就应该能够运行单元测试并确认给定的字符串“ World”,HelloWorld服务的确在整个通道安排中确实返回了“ Hello World”和消息。

同样,可选但我强烈建议您运行“ mvn -e全新安装站点”。 假设您已正确配置了一些代码覆盖率工具(在我的情况下为cobertura),将为您提供一个不错HTML报告,其中显示了代码覆盖率。 在这种情况下,它将是100%。 我已经写了一系列关于代码质量的文章 ,详细介绍了该主题,但是总而言之,确保我使用和推荐使用的任何编码实践/框架都符合一些基本的代码质量标准对我来说非常重要。 。 能够进行单元测试和测量是我所做的这样一项基本检查。 毋庸置疑,一般来说,Spring(包括Spring集成)会通过带有鲜艳色彩的检查。

结论

本文就是这样。 快乐的编码。

建议进一步阅读...

以下是本系列早期文章的链接:

  1. Hello World with Spring 3 MVC
  2. 使用Spring 3 MVC处理表单
  3. 使用Spring 3进行单元测试和记录
  4. 使用Spring 3 MVC处理表单验证
  5. 引入Spring集成

这些是我可以推荐的出色材料:

  1. Spring Integration入门
  2. Spring Integration的示例代码
  3. Spring集成–第1节– Hello World
  4. Spring集成–第2节–更多世界

参考: Tech for Enterprise博客上我们JCG合作伙伴 Partho的Spring与Gatways的集成 。


翻译自: https://www.javacodegeeks.com/2012/08/spring-integration-with-gateways.html

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

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

相关文章

UIAutomation识别UI元素

MS UI Automation&#xff08;Microsoft User Interface Automation&#xff1a;UIA&#xff09;是随.net framework3.0一起发布的&#xff0c;虽然在如今这个几乎每天都有各种新名词、新技术出来的所谓的21世纪&#xff0c;它显得已经有些过时了。前些日子&#xff0c;正好一个…

【C++第一个Demo】---控制台RPG游戏3【登陆菜单树】

【登陆系统--树结构】 1 首先我这里设计&#xff0c;由一个基类MainMenu构建树结构&#xff0c;并实现控制台上菜单之间的切换和返回操作 1 #ifndef _UI_BASE_H_2 #define _UI_BASE_H_3 4 #include <string>5 #include <vector>6 #include"..//Marco.h"7…

不存在_施文忠 | ”存在“与“不存在”——巴蜀文明概论

海德格尔有句名言&#xff1a;“存在者存在&#xff0c;不存在者不存在&#xff01;”四川&#xff0c;一个伟大的存在&#xff0c;偏偏存在于四川的口头禅却是“不存在”。在不存在中追求存在&#xff0c;在存在中摆脱存在。六月白鹿镇&#xff0c;书院学习了《李白与海德格尔…

Spring和JSF集成:异常处理

大多数JSF开发人员都会熟悉“发生错误”页面&#xff0c;当在他们的代码某处引发意外异常时&#xff0c;该页面就会显示。 该页面在开发时确实很有用&#xff0c;但对于生产应用程序通常不是您想要的。 通常&#xff0c;在用库存JSF替换此页面时&#xff0c;您有两种选择。 您可…

Altium 原理图出现元件“Extra Pin…in Normal of part ”警告的解决方法

转载于&#xff1a; http://blog.csdn.net/idoming/article/details/45575627 使用Altium Designer的时候编译完后&#xff0c;只关注过错误没有关注过警告&#xff0c;现在认真排查一下有哪些警告。 正在进行的项目原理图编译完成后提示标题中的警告信息。经过在网上搜索&…

XidianOJ 1087 浪漫的V8

题目描述 V8为了讨女朋友开心&#xff0c;给lx承包大活后面那个水塘。为了筹集资金&#xff0c;V8偷偷地溜进了一座古墓&#xff0c;发现在他面前有金光闪闪的若干小箱子&#xff0c;里面全都是金粉&#xff0c;作为横行于各种#&#xffe5;&场所的V8来说&#xff0c;辨别不…

curl php 模拟来源_php 使用curl模拟ip和来源进行访问的实现方法

对于限制了ip和来源的网站&#xff0c;使用正常的访问方式是无法访问的。本文将介绍一种方法&#xff0c;使用php的curl类实现模拟ip和来源&#xff0c;访问那些限制了ip和来源的网站。1.设置页面限制ip和来源访问server.php$client_ip getip();$referer getreferer();$allow…

堆栈C语言实现

堆栈的抽象数据类型描述&#xff1a; 类型名称&#xff1a; 堆栈&#xff08;Stack&#xff09;。数据对象集&#xff1a; 一个有 0 个或多个元素的又穷表。操作集&#xff1a; 长度为 max_size 的堆栈 S ∈ Stack&#xff0c; 堆栈元素 item ∈ ElementType。stack creatc_sta…

woocommerce 分类到菜单_Woocommerce商店显示分类

我是wordpress的新手, 所以如果我输入的语言错误, 请仍然为我提供帮助。我想使用woocommerce显示具有可变产品的商店, 我希望商店链接登录页面显示具有该类别特征图像的商店类别。我当前的商店页面显示所有产品, 并分页到其他产品页面, 我找不到所有产品的模板。当我进入wp-adm…

JBoss BRMS 5.3 –添加了业务活动监视(BAM)报告

自从JBoss BRMS 5.3产品发布以来&#xff0c;添加了jBPM 5 BPM组件的最常见问题之一是业务活动监视&#xff08;BAM&#xff09;和报告功能。 本文将引导您完成添加过程&#xff0c;但是请注意&#xff0c;在撰写本文时&#xff0c;这不是产品的受支持功能。 在JBoss BRMS 5.3上…

Zookeeper开源客户端框架Curator简介

Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKeeper的过程中遇到的问题, 我们也遇…

【树形DP】 HDU 2196 Computer

题意&#xff1a;求节点间的最大距离 先DFS一次 记录下 每一节点的子树下的最大距离&#xff08;DP[ u ] [ 0 ]&#xff09;和第二大距离&#xff08;DP[ u ] [ 1 ]&#xff09; 用DP[ v ] [ 2 ] 表示由v的父节点来的最大距离 再取DP[ u ] [ 0 ] 与 DP[ u ][ 2 ] 的最值 #inclu…

适当的Java堆大小的5个技巧

确定生产系统合适的Java堆大小不是一件容易的事。 在我的Java EE企业经验中&#xff0c;我发现由于Java堆容量和调整不足而导致的多个性能问题。 本文将为您提供5个技巧&#xff0c;这些技巧可以帮助您确定当前或新生产环境的最佳Java堆大小。 这些技巧中的一些对于预防和解决j…

pythondocumentation是什么_怎样阅读Python官方文档

如何阅读官方Python文档的初学者,因为他们没有相关的经验,学习语言通常是费时且劳动密集型和效果不是很好。下面简要介绍如何阅读官方文件。一旦你学会快速查询官方文件,学习效率会提高很多文档门户。如何阅读API文档中内容标准库,如何快速找到你想要的。第一种方法是先查找索引…

数据库过大无法导入

导SQL数据库结构数据时&#xff0c;如果数据是批量插入的话会报错&#xff1a;2006 - MySQL server has gone away。 解决办法&#xff1a;找到你的mysql目录下的my.ini配置文件&#xff0c;加入以下代码 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…

UVa 11475 - Extend to Palindrome

題目&#xff1a;給你一個字符串&#xff0c;在後面拼接一部分使得它變成回文串&#xff0c;使得串最短。輸出這個回文串。分析&#xff1a;KMP&#xff0c;dp。這裡利用KMP算法將串和它的轉置匹配&#xff0c;看結束時匹配的長度就可以。 因為串比较長。使用KMP比较合適&#…

构建Java Web应用程序时遵循MVC的三个步骤

步骤1 做 始终通过servlet / action bean处理URL&#xff08;POST表单&#xff0c;单击链接等&#xff09;&#xff0c;而不是通过JSP处理 为什么 ActionBeans&#xff08;无论某些框架调用那些类&#xff09;&#xff0c;而servlet很少是控制器 用于处理用户输入。 JSP是专用于…

曝光原理_泰国精戈咖啡效果反馈 作用原理曝光

我的男人才三十五六&#xff0c;两个人就开始分开睡了&#xff0c;自从咱们在一起以来&#xff0c;咱们的感情一向很好&#xff0c;这是十分调和的。但随着年纪的添加&#xff0c;我逐渐发现他身体阑珊的越来越凶猛&#xff0c;夫妻生活方面硬度逐渐下降&#xff0c;时间也越来…

使用junit4测试Spring

Spring 提供便捷的测试&#xff0c;非常方便整合Junit 导入 spring-test-3.2.0.RELEASE.jar ---- 提供与Junit的整合 RunWith(SpringJUnit4ClassRunner.class) // 整合 ContextConfiguration(locations"classpath:applicationContext.xml") // 加载配置public class…

EasyCriteria –使用JPA Criteria的简便方法

今天&#xff0c;我们将看到有关此工具的信息&#xff0c;该工具使使用JPA Criteria更加容易。 使用该库的应用程序将在JPA实现中更加简洁&#xff0c;易于使用和可移植。 在本文的结尾&#xff0c;您将找到要下载的源代码。 什么是标准&#xff1f; 当前是创建动态查询的最佳…