簡體   English   中英

Spring-integration 中的@InboundChannelAdapter 沒有連續運行?

[英]@InboundChannelAdapter in Spring-integration is not running continously?

我在 spring 雲數據流中工作,我有一個場景,比如從數據庫中讀取數據並使用 @InboundChannelAdapter 將數據發送到 kafka 主題

以下是我遵循的策略。

-> 如果列表為空,則創建通用列表以存儲對象

->如果列表有數據我不會輪詢

->我通過使用索引將值一一發送到kafka,然后我將刪除索引

如果我保留@Bean,它只會將列表中的第一個 object 插入到 kafka 主題。

{"id":101443442,"name":"Mobile1","price":8000}

如果我刪除@Bean,那么它會將所有空數據插入kafka。

{}

public static List<Product> products;

@Bean
public void initList() {
    products = new ArrayList<>();
}    

@Bean
@InboundChannelAdapter(channel = TbeSource.PR1)
public MessageSource<Product> addProducts() {

    if (products.size() == 0) {
        products.add(new Product(101443442, "Mobile1", 8000));
        products.add(new Product(102235434, "book111", 6000));
    }
    MessageBuilder<Product> message = MessageBuilder.withPayload(products.get(0));
    products.remove(0);
    return message::build;
}

我究竟做錯了什么?

我需要通過從數據庫讀取來頻繁發送數據嗎?

真的不清楚你在問什么。

如果您談論 JDBC,那么您可以考慮使用來自數據流的現成應用程序的JDBC Source

如果您自己進行邏輯以從數據庫中獲取數據,您可以考慮使用來自JdbcPollingChannelAdapter集成的@InboundChannelAdapter ,原因與 @InboundChannelAdapter 相同。

您的邏輯與該列表的 rest 不清楚。 void方法上看到@Bean很奇怪。 如果您需要初始化該products並從MessageSource實現中獲取訪問權限,您只需執行private List<Product> products = new ArrayList<>(); . 將財產public確實是一種不好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM