亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 ignite-messaging lambda 函數的 Remotelisten

如何在 ignite-messaging lambda 函數的 Remotelisten

慕田峪4524236 2023-10-13 10:05:50
我有一個監聽主題的類(TopicListenerImp),我想從remoteListen函數獲取消息,并將其作為參數提供給其他服務類中的另一個非靜態函數。     @Component    public class TopicListenerImp implements TopicListener {      private NotificationService notificationService;      private SubscriptionRepository subscriptionRepository;      private SubscriptionRules subscriptionRules;      private NFInstancesService nfInstancesService;      private Ignite ignite;      public TopicListenerImp(          SubscriptionRules subscriptionRules,          NotificationService notificationService,          SubscriptionRepository subscriptionRepository,          Ignite ignite,          NFInstancesService nfInstancesService) {        this.subscriptionRules = subscriptionRules;        this.notificationService = notificationService;        this.subscriptionRepository = subscriptionRepository;        this.nfInstancesService = nfInstancesService;        this.ignite = ignite;      }      @Bean      public void startTopicListening() {        IgniteMessaging rmtMsg = ignite.message(ignite.cluster().forLocal());        rmtMsg.remoteListen(            "SUSPEND",            (nodeId, msg) -> {              notifyIfSubscriptionExist((String) msg); //here where I used the message that comes from topic              return true;             });      }      public void notifyIfSubscriptionExist(String msg) {        List<String> nfInstanceIdSubscriptionId = parseNfInstanceIdSubscriptionId(msg);        Optional<NFProfile> nfProfile =            nfInstancesService.getNFInstance(nfInstanceIdSubscriptionId.get(0));        Optional<SubscriptionData> subscriptionDataOptional =            subscriptionRepository.getSubscriptionData(nfInstanceIdSubscriptionId.get(1));            });      }但我收到以下錯誤;    Caused by: org.apache.ignite.binary.BinaryObjectException: Failed to serialize object etc.當我靜態注入字段時,它起作用了。但是當我這樣做時,IDE 會發出警告“不要從構造函數方法更新靜態變量”。
查看完整描述

1 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

RemoteListen采用一個謂詞,該謂詞將被序列化并通過網絡發送到遠程節點。當您在其實現中調用非靜態方法時,它會使整個this對象被序列化。它可能會導致意外行為和通過網絡發送大量數據。

一般來說,不建議通過網絡發送 lambda 函數,因為它們的序列化依賴于 VM,并且無法讓您控制實際發送的內容。如果您想通過網絡發送謂詞,則創建一個實現謂詞接口的類并使用該類的實例。

如果不需要集群中的所有節點都訂閱該主題,那么localListen就足夠了。


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號