我有3個服務,"service-1 "根據傳遞給payload的id值動態地路由到其他兩個服務。
但是支付處理器總是路由到-out-0 "spring.cloud.function.bindings.processor-out-0"的主題。 服務-3從未被呼叫。
嘗試使用spring.cloud.stream.sendto.destination,它已被廢棄,但服務-3仍未被路由
。service-1
服務-1
@Bean
public Function<Flux<String>, Flux<Object>> processor(){
return messageFlux -> messageFlux.latMap(
stringMessage -> {
try {
payload = jsonMapper.readValue(stringMessage,Map.class)。
} catch (JsonProcessingException e) {
e.printStackTrace()。
}
logger.info("Payment payload :" payload.get("id") )。
if(payload.get("id").equalsIgnoreCase("e-payment")
streamBridge.send(" processor-out-0",stringMessage)。
else[/span
streamBridge.send("processor-out-1",stringMessage)。
return Mono.just(stringMessage)。
});
}
@Bean
public Consumer<String> consumer() {
return data -> logger.info("Payment Response :"/span> data);
}
service 1 application.properties
server.port = 9000。
spring.application.name=payment-process
spring.cloud.function.definition=供應商;處理器;消費者
spring.cloud.stream.source=processorCheck;processorEPayment
#bindings for payment processor
spring.cloud.stream.function.bindings.processor-out-0=e-payment
spring.cloud.stream.function.bindings.processor-out-1=check-payment
spring.cloud.stream.function.bindings.processor in-0=payment-process
#bindings for response for payment processor
spring.cloud.stream.function.bindings.consumer-in-0=payment-response
#群組
spring.cloud.stream.bindings.processor-in-0.group=check-service
spring.cloud.stream.bindings.processor-out-0.group=check-service
servie-2
@Bean
public Function<String,String> processorCheck() {
return
data ->{
logger.info("Data received from :" data)。
return "Check Payment Successful"。
};
}
service-2 application.properties
server.port = 9002。
spring.application.name=check-service
spring.cloud.function.definition=processorCheck
spring.cloud.stream.source=processorCheck
spring.cloud.stream.bindings.processorCheck-0.destination=check-payment
spring.cloud.stream.bindings.processorCheck-0.destination=payment-response
spring.cloud.stream.bindings.processorCheck-0.group=check-service
spring.cloud.stream.bindings.processorCheck-0.group=check-service
spring.cloud.stream.function.routing.enabled=true
消費者服務-3
@Bean
public Function<String,String> processorEPayment() {
return
data ->{
logger.info("Data received from :" data)。
return "電子支付成功"。
};
}
service-3 application.properties
server.port = 9001。
spring.application.name=e-payment-service
spring.cloud.function.definition=processorEPayment
#輸入到電子支付服務主題
spring.cloud.stream.bindings.processorEPayment-0.destination=e-payment
spring.cloud.stream.source=processorEPayment
#向電子支付主題輸出回應
spring.cloud.stream.bindings.processorEPayment-out-0.destination=payment-response
spring.cloud.stream.bindings.processorEPayment-0.group=e-payment-service
spring.cloud.stream.bindings.processorEPayment-0.group=e-payment-service
spring.cloud.stream.function.routing.enabled=true。
uj5u.com熱心網友回復:
在你的服務-1中,在第一個StreamBridge發送中,你可以這樣做 - streamBridge.send("e-payment",stringMessage); 第二個StreamBridge發送呼叫變成 - streamBridge. send("check-payment",stringMessage); 它們將分別被發送到主題,e-payment和check-payment。
洗掉service-1中的這兩個屬性:(它們是不必要的,并且可能改變系結的語意)。
spring.cloud.stream.function.bindings.processor-out-0=e-payment
spring.cloud.stream.function.bindings.processor-out-1=check-payment
你需要為輸出系結添加一個目的地。
spring.cloud.stream.bindings.processor-out-0.destination=payment-response
然后消費者將從這個主題消費(因為你改變了消費者的系結以反映這個主題)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332557.html
標籤:

