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

如何在使用@bean配置时到达消息endpoint

壤驷宏才
2023-03-14

当我使用spring文档中描述的配置时:

@Configuration
@EnableIntegration
public class MyFlowConfiguration {

    @Bean
    @InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
    public MessageSource<String> consoleSource() {
        return CharacterStreamReadingMessageSource.stdin();
    }

    @Bean
    @Transformer(inputChannel = "inputChannel", outputChannel = "httpChannel")
    public ObjectToMapTransformer toMapTransformer() {
        return new ObjectToMapTransformer();
    }

    @Bean
    @ServiceActivator(inputChannel = "httpChannel")
    public MessageHandler httpHandler() {
        HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("http://foo/service");
        handler.setExpectedResponseType(String.class);
        handler.setOutputChannelName("outputChannel");
        return handler;
    }

    @Bean
    @ServiceActivator(inputChannel = "outputChannel")
    public LoggingHandler loggingHandler() {
        return new LoggingHandler("info");
    }

}

共有1个答案

武成和
2023-03-14

如果我理解正确的话,您希望将其中一些endpoint注入到您的服务中。不确定“Why?”,但可以这样做(例如,对于HttpHandler):

@Autowire
@Qualifier("myFlowConfiguration.httpHandler.serviceActivator")
private AbstractEndpoint httpEndpoint;

根据上述规则:

>

  • MyFlowConfiguration-类的bean名称,该类包含具有@ServiceActivator的方法。在您的例子中,它是您的@configuration

    HttpHandler@ServiceActivator的方法名

    ServiceActivator-@ServiceActivator的非独立名称。

    清楚了吗?

    /* using fully qualified class names as default bean names */
     private BeanNameGenerator importBeanNameGenerator = new   AnnotationBeanNameGenerator() {
        @Override
        protected String buildDefaultBeanName(BeanDefinition definition) {
            return definition.getBeanClassName();
        }
    };
    

    因此,如果我们要从那些未命名的类中引用endpoint,我们必须记住这一点。

    当然,为了简化您的生活,您只需在myflowconfiguration中添加一个名称即可:

    @Configuration("myFlowConfiguration")
    @EnableIntegration
    public class MyFlowConfiguration {
    

  •  类似资料:
    • 我刚开始学Kafka,Kafka-蟒蛇。在下面的代码中,我试图在消息到达时读取它们。但出于某种原因,消费者似乎要等到一定数量的消息积累后才能获取它们。 我最初以为是因为正在批量出版的制片人。当我运行“kafka-console-consumer--bootstrap-servers--topic”时,我可以看到发布后收到的每一条消息(就像在consumer控制台上看到的那样) 有人能指出用KafK

    • 例如,我有一个消费者,最初在时间t1发送100条消息,然后我的消费者在t1+30秒启动并运行,那么我的消费者会使用t1+30秒之后发布的消息,还是会使用t1之后发布的消息?

    • 我正在使用Kafka(与雅虎Kafka经理) 我想为重置消息设置一个规则,或者他们如何称呼它:“分区偏移量的总和” 在server.properties上是否有滚动kafka偏移量的参数? (即:我想重置或删除所有影响邮件保留的参数) 谢谢。

    • 基本上,我想问的是:将Spring Boot自动配置的bean自动导入XML配置文件的等价物是什么? 下面是我的主要Spring Boot入口点,它只是所有文档中列出的标准类: 我主要在一个Spring集成应用程序中使用它,在这个应用程序中Java配置还没有得到很好的支持,框架的核心是基于XML配置的,但是我希望在一些集成元素中使用Spring Boot自动配置的和bean。 https://gi

    • 一般来说,我对EJB和JavaEE都是新手,目前我正在做一个小项目,它基本上实现了一个游戏,两个玩家PlayerA和PlayerB可以通过web浏览器玩。 我目前有一个设置为几个JSP页面像这样:登录- 玩家A和B有两个登录页面,它们链接到同一个playerprofile页面,显示所选玩家的用户名和分数,信息存储在数据库中。在该个人资料页面中,玩家可以点击将他们发送到acceptGame页面的链接

    • 我需要定义一个从主题读取消息(包含xml)并将其解组到JavaBean的路由。 早些时候,我使用Spring JmsTemboard来管理这个主题的连接工厂,我的路由看起来像这样(并且工作正常)。消息转换器本质上返回方法中的实例 现在,我使用org.springframework.jms.listener.DefaultMessageListenerContainer来连接到这个持久的主题,而不是