当前位置: 首页 > 知识库问答 >
问题:

Spring集成——用消息转换器将一个通道路由到特定的通道

罗昕
2023-03-14

我是Spring集成的新手

我的目标是将信息从一个渠道传递到另一个渠道(链式过程)

通道1---

1.

    Each channel payloads will have different Class Objects.

尝试: 1.当我尝试使用@transformer无法与“erroeChannel”通信时。

问题:

找到答案

Configuration:

<int:channel id="channel1"/>
<int:channel id="channel2"/>
<int:channel id="channel3"/>
<int:channel id="channel4"/>

<int:service-activator input-channel="channel1" ref="firstChannel" method="doProcess1" />
<int:service-activator input-channel="channel2" ref="secondChannel" method="doProcess2" />
<int:service-activator input-channel="channel3" ref="thirdChannel" method="doProcess3" />
<int:service-activator input-channel="channel4" ref="forthChannel" method="doProcess4" />
<int:service-activator input-channel="errorChannel" ref="errorHandlerChannel" method="doErrorProcess" />

Java Code: 

public FirstChannel {

    private Map<String, MessageChannel> msgChannels;
    boolean isError = false;
    @Autowired
    public ScheduleParser(Map<String, MessageChannel> msgChannels) {
        super();
        this.msgChannels = msgChannels;
    }

    public void doprocess1(Message<?> message){
    File file = (File) message.getPayload();
    //business code 

    if(!isError)
        //transforming the messae
        msgChannels.get("channel2").send(new GenericMessage(EmployeeVO , headersMap));
    else 
        msgChannels.get("errorChannel").send(new GenericMessage(ObjectVO , headersMap));
}

}

其他通道代码也是如此

共有1个答案

穆浩皛
2023-03-14

通道并不相互连接,而是连接到endpoint。

变形金刚不路由,路由器路由。

你需要像这样的东西

channel1->payload-type-router

type1Channel->...
type2Channel->...
...

可能为下游的每种有效载荷类型配备不同的变压器。

通常,展示您尝试过的配置比展示一些抽象概念更好。

错误流配置取决于启动流的内容(网关、轮询器等)-即channel1的上游。

编辑

您的配置完全错误。例如,您当前在channel1上有两个订户,一个是头值路由器,另一个是服务激活器。

到达< code>channel1的消息将交替发送到其中一个,而发送到服务激活器的消息将永远不会发送到路由器。

不知道完整的图片,我猜你需要类似...

channel1->serviceActivator1->channel1toRouter->router(channel2 or failed)
channel2->serviceActivator2->channel2toRouter->router(channel2 or failed)
...
 类似资料:
  • 我是Spring集成的新手,正在研究一个从单个通道向多个通道发送消息的示例,从这个角度来看,为每个通道使用Redis消息存储,目的是不丢失任何消息。要求将消息发送到通道-replyChannel、mailChannel和dbChannel。目前,代码只打印sysout语句,没有主要功能。 为了检查消息是否被正确路由,我编写了一个java测试类来发送15条消息。 检查输出,我发现一些消息正在丢失。也

  • 我需要在我的Spring集成上下文中动态地将消息分配给MessageChannel。当我知道我想要的MessageChannel的名称时,我可以通过从上下文中获取MessageChannel bean来做到这一点。 我需要做的是通过编程查找在ChannelAdapter/服务中设置的消息通道的名称/id。 但是,MessageChannel API没有与之关联的getName()或getId()方

  • 我目前正在使用Java和jda为discord制作一个机器人。我想让机器人向特定的通道发送消息。我该怎么做?

  • 如何要求机器人将消息发送到与机器人接收命令不同的另一个通道(特定通道)? 假设bot在通道中收到消息,如果操作完成,则bot发送给通道。 code:

  • 我是RabbitMQ和Spring Integration的新手。 我有一个使用来自通道的JSON消息的用例,将它转换成一个对象。我需要在对象中设置的一个字段是消息Id(delivery.getEnvelope()。getDeliveryTag()),我们从rabbitMQ接收消息,在所有业务逻辑之后,我们需要它来进行ack处理。 如何使用Spring集成来实现?这是我的xml配置。 transf

  • 使用Spring Integration Kafka,使用出站通道适配器,我尝试向名为“test”的主题发送消息 通过命令行终端,我启动了动物园管理员、kafka并创建了名为“test”的主题 Spring XML配置 JUnit测试代码 测试用例成功,在调试时,我发现channel.send()返回true 我使用下面的命令通过命令行检查了主题,但是我在测试主题中看不到任何消息。 bin/kaf