我现在正在使用Spring Integration和我的项目,特别是使用MessageChannel / PublishSubscribeChannel。我想要实现的是创建一个代理模块,以便系统的其他部分可以调用此模块将消息发送到特定的MessageChannel。
以下是我现在在代理模块中所做的事情:
@Configuration
public class BrokerConfiguration {
@Bean
public MessageChannel brokerChannel1() {
return new PublishSubscribeChannel();
}
}
和
@Component
public class BrokerA {
@Autowired
@Qualifier("brokerChannel1")
public MessageChannel messageChannel;
public void sendAMessage() {
messageChannel.send(MessageBuilder.withPayload("This is a message!").build());
}
}
我通过在代理模块中创建一个SpringBootApplication来解决这个问题,它似乎工作得很好。但是,当我尝试在我的系统的不同模块中使用它时,如下所示:
@Autowired
private BrokerA brokerA;
public void doSomethingHere() {
brokerA.sendAMessage();
}
我得到这样的ClassCastException:
java.lang.ClassCastException: org.springframework.integration.channel.PublishSubscribeChannel cannot be cast to org.springframework.messaging.MessageChannel
当我将BrokerA中的messageChannel更改为PublishSubscribeChannel类型时,它会抱怨PublishSubscribeChannel没有名为send()的方法。
这真让我感到困惑。有什么建议或意见吗?谢谢!
答案 0 :(得分:1)
检查你的类路径,可能你有重复的jar。
答案 1 :(得分:1)
你在类路径上有一个旧版本的Spring Integration;在Spring 4.0中,MessageChannel
等已从o.s.integration...
移至o.s.messaging
。
您需要使用Spring Integration 4.x。
答案 2 :(得分:0)
我在上一个春季启动版本的环境中运行了你的代码,没有关于spring的任何版本规范,并且它正常工作,唯一的错误在于
MessageBuilder.withPayload("This is a message!")
它应该是MessageBuilder.withPayload("This is a message!").build()
我使用org.springframework.integration.support.MessageBuilder
进行了验证。
答案 3 :(得分:0)
尝试在BrokerConfiguration中的brokerChannel1()的return语句中进行显式强制转换。