SpringCloud 禁用功能
如果需要禁用此功能,请设置stubrunner.integration.enabled=false属性。
假设您具有以下Maven存储库,其中包含integrationService应用程序的已部署存根:
└── .m2
└── repository
└── io
└── codearte
└── accurest
└── stubs
└── integrationService
├── 0.0.1-SNAPSHOT
│ ├── integrationService-0.0.1-SNAPSHOT.pom
│ ├── integrationService-0.0.1-SNAPSHOT-stubs.jar
│ └── maven-metadata-local.xml
└── maven-metadata-local.xml进一步假设存根包含以下结构:
├── META-INF
│ └── MANIFEST.MF
└── repository
├── accurest
│ ├── bookDeleted.groovy
│ ├── bookReturned1.groovy
│ └── bookReturned2.groovy
└── mappings考虑以下合同(编号1):
Contract.make {
label 'return_book_1'
input {
triggeredBy('bookReturnedTriggered()')
}
outputMessage {
sentTo('output')
body('''{ "bookName" : "foo" }''')
headers {
header('BOOK-NAME', 'foo')
}
}
}现在考虑2:
Contract.make {
label 'return_book_2'
input {
messageFrom('input')
messageBody([
bookName: 'foo'
])
messageHeaders {
header('sample', 'header')
}
}
outputMessage {
sentTo('output')
body([
bookName: 'foo'
])
headers {
header('BOOK-NAME', 'foo')
}
}
}以及以下Spring Integration路线:
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns="http://www.springframework.org/schema/integration" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd"> <!-- REQUIRED FOR TESTING --> <bridge input-channel="output" output-channel="outputTest"/> <channel id="outputTest"> <queue/> </channel> </beans:beans>
这些示例适用于三种情况:
- 方案1(无输入消息)
- 方案2(由输入触发的输出)
- 方案3(输入无输出)
要通过return_book_1标签触发消息,请使用StubTigger接口,如下所示:
stubFinder.trigger('return_book_1')要监听发送到output的消息的输出,请执行以下操作:
Message<?> receivedMessage = messaging.receive('outputTest')收到的消息将通过以下断言:
receivedMessage != null assertJsons(receivedMessage.payload) receivedMessage.headers.get('BOOK-NAME') == 'foo'
由于已为您设置了路由,因此您可以向output目标发送消息:
messaging.send(new BookReturned('foo'), [sample: 'header'], 'input')
要监听发送到output的消息的输出,请执行以下操作:
Message<?> receivedMessage = messaging.receive('outputTest')收到的消息传递以下断言:
receivedMessage != null assertJsons(receivedMessage.payload) receivedMessage.headers.get('BOOK-NAME') == 'foo'
由于已为您设置了路由,因此您可以向input目标发送消息:
messaging.send(new BookReturned('foo'), [sample: 'header'], 'delete')