2016-04-09 15 views
0

İskelede çalışan bir kuyruklu yıldız uygulamasına sahibim. Gelen yayınları istemcilerden almak, daha sonra bazı işlemler yapmak (db ile etkileşimde bulunmak) ve daha sonra hiç hatayla karşılaşılmamışsa tüm abonelere yayın yaparak bitirmek istiyorum.CometD: Yayın öncesi mesaj yayınlarını yayınlayın

İlk düşüncem bunu bir uzantıyla yapmak ama daha uygun bir yol var mı? İşte


benim modifiye girişimi @sbordet cevap dayanmaktadır: Esasen

@Inject 
private BayeuxServer bayeux; 
@Session 
private ServerSession serverSession; 

    @Listener("/service/*") 
    public void handle(ServerSession remote, ServerMessage message) { 
     System.out.println("Message received on service: " + message); 

     String broadcastChannel = message.getChannel().replace("/service", ""); 
     System.out.println("bayeux: " + bayeux + " - sending: " + broadcastChannel + " - " + message.getData()); 
     System.out.println("bayeux.getChannel(broadcastChannel): " + bayeux.getChannel(broadcastChannel)); 
     bayeux.getChannel(broadcastChannel).publish(serverSession, message.getData()); 
    } 

, tüm hizmet kanalları için dinlemek ve bazı işlem yapmak, daha sonra aynı yayın kanalına yayınlamak istediğiniz, daha az hizmet. Yani/servis/test/test olur.

Bu akım extensions ancak services kullanmayın, bayeux.getChannel(broadcastChannel)

cevap

1

ne anlatmak CometD içindeki normal bir mesaj işleme Çünkü bir null döndürür.

Eklentiler, CometD'nin merkezindeki Bayeux protokolünün davranışını değiştirmek istediğiniz durumlar için kullanılmalıdır.

Hizmetler, diğer yandan, iş mesajlarınızı uygulamanızın değiştiğini ve bu nedenle de sizin durumunuz için ideal bir yoldur.

+0

"bayeux.getChannel (broadcastChannel)) kullandığımda;' '' getChannel() 'yöntemi null değerini döndürür ... – mtyson

+0

Hizmet kanalını// service/testini alıyorum ve daha sonra'/test 'üzerinden yayın yapıyorum - Bu doğru semantik gibi görünüyor. Ama bayeux (Spring üzerinden enjekte edilir) getChannel ('/ test') için null değerini döndürür. – mtyson

+0

Yaklaşımınızı kullanarak daha fazla ayrıntıyı kullanarak cevabı güncelledim ... – mtyson