SpringCloud Stub Runner Camel例子

2023-12-12 17:45 更新

存根結(jié)構(gòu)

讓我們假設(shè)我們有以下Maven存儲庫,其中包含用于camelService應(yīng)用程序的已部署存根。

└── .m2
    └── repository
        └── io
            └── codearte
                └── accurest
                    └── stubs
                        └── camelService
                            ├── 0.0.1-SNAPSHOT
                            │   ├── camelService-0.0.1-SNAPSHOT.pom
                            │   ├── camelService-0.0.1-SNAPSHOT-stubs.jar
                            │   └── maven-metadata-local.xml
                            └── maven-metadata-local.xml

存根包含以下結(jié)構(gòu):

├── 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('jms:output')
		body('''{ "bookName" : "foo" }''')
		headers {
			header('BOOK-NAME', 'foo')
		}
	}
}

和數(shù)字2

Contract.make {
	label 'return_book_2'
	input {
		messageFrom('jms:input')
		messageBody([
				bookName: 'foo'
		])
		messageHeaders {
			header('sample', 'header')
		}
	}
	outputMessage {
		sentTo('jms:output')
		body([
				bookName: 'foo'
		])
		headers {
			header('BOOK-NAME', 'foo')
		}
	}
}

方案1(無輸入消息)

為了通過return_book_1標(biāo)簽觸發(fā)消息,我們將使用StubTigger接口,如下所示

stubFinder.trigger('return_book_1')

接下來,我們要收聽發(fā)送到jms:output的消息的輸出

Exchange receivedMessage = consumerTemplate.receive('jms:output', 5000)

并且收到的消息將通過以下斷言

receivedMessage != null
assertThatBodyContainsBookNameFoo(receivedMessage.in.body)
receivedMessage.in.headers.get('BOOK-NAME') == 'foo'

場景2(由輸入觸發(fā)輸出)

由于已為您設(shè)置了路由,僅向jms:output目標(biāo)發(fā)送一條消息就足夠了。

producerTemplate.
		sendBodyAndHeaders('jms:input', new BookReturned('foo'), [sample: 'header'])

接下來,我們要監(jiān)聽發(fā)送到jms:output的消息的輸出

Exchange receivedMessage = consumerTemplate.receive('jms:output', 5000)

并且收到的消息將通過以下斷言

receivedMessage != null
assertThatBodyContainsBookNameFoo(receivedMessage.in.body)
receivedMessage.in.headers.get('BOOK-NAME') == 'foo'

方案3(輸入無輸出)

由于已為您設(shè)置了路由,僅向jms:output目標(biāo)發(fā)送一條消息就足夠了。

producerTemplate.
		sendBodyAndHeaders('jms:delete', new BookReturned('foo'), [sample: 'header'])
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號