Скажем, у меня есть собственный модуль в Spring XD (я использую Spring XD + Spring Integration + hibernate). Модуль в основном получает что-то из БД (скажем, я сохраняю его с помощью объекта гибернации, поэтому я использую объект под названием «DataFromDB»). DataFromDB - это список, затем я получаю каждый элемент из списка и хочу отправить его, используя что-то вроде:
String payload = convertDataFromDBToJson(record);
return MessageBuilder.createMessage(payload, message.getHeaders());
- Проблема в том, что каждый раз, когда мне нужно отправить сообщение, я должен вернуть сообщение.
- Поэтому я хотел бы перебрать список DataFromDB и отправить каждый элемент в виде сообщения.
Есть ли способ отправить несколько сообщений?
Редактировать:
Я просто создал небольшой пример в соответствии с комментариями, пытаясь воспроизвести сценарий. Вот что у меня есть:
мой класс трансформатора:
public class TransformerClass {
public Collection<Message<?>> transformerMethod(Message<?> message) {
List<Message<?>> messages = new ArrayList<Message<?>>();
messages.add(new GenericMessage<>("foo"));
messages.add(new GenericMessage<>("bar"));
return messages;
}
Моя конфигурация xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<tx:annotation-driven />
<int:channel id="input" />
<bean id="transFormerClass" class="myModule.TransformerClass">
</bean>
<int:transformer input-channel="input" output-channel="output" ref="transFormerClass" method="transformerMethod"/>
<int:channel id="output"/>
</beans>
Мой тестовый класс:
@ModuleName(value = "someModule", type = ModuleType.processor)
public class TransformerClassTest extends xDTest {
private String streamName = "myStream";
private String chainTest = "someModule";
@SuppressWarnings("unchecked")
@Test
public void testPartnerNotification() throws IOException {
this.chain = SingleNodeProcessingChainSupport.chain(application, streamName, chainTest);
//Just to send something to the module as a input.
Message<String> input = MessageBuilder.createMessage("hello world", buildHeaders());
this.chain.send(input);
//Receiving a Single message
Message<String> result = (Message<String>) chain.receive(5000);
System.out.println("Result: " + result);
}
private MessageHeaders buildHeaders() {
Map<String, Object> hashMap = new HashMap<String,Object>();
hashMap.put("test", "testing");
MessageHeaders headers = new MessageHeaders(hashMap);
return headers;
}
}
Выход:
Результат: GenericMessage [payload = [GenericMessage [payload = foo, headers = {timestamp = 1475072951345, id = 7b6c79a2-db85-563e-c238-262a31141456}], GenericMessage [payload = bar, headers = {id713745 = {ide07295 = {timestamp = 147505] -3513-b95e-3a25-4fd3550f2fea}]], заголовки = {timestamp = 1475072951347, id = f90d94c4-e323-70ed-62ee-4b8bce64814d, test = testing}]
Я использую Spring Integration 4.2.2.RELEASE.
MessageBuilder.createMessage(payload, message.getHeaders());
Следовательно, в этом случае будет отправлено только одно сообщение (тогда только один элемент в списке) t. - person Columb1a   schedule 26.09.2016