sql >> Databáze >  >> NoSQL >> Redis

Přihlaste se k odběru více kanálů se stejným vláknem Jedis

Pozoroval jsem stejný problém, a to, že vlákno odběru se zablokuje, jakmile se přihlásíte k odběru. Abych to vyřešil, implementoval jsem optimalizovaného pub/sub klienta pomocí Netty a začlenil jej do Jedis forku. Není to komplexní řešení a neměl jsem čas ho skutečně dokončit, ale funguje pro základní odběry kanálů a vzorů. Základy jsou:

Získejte instanci pubsub pomocí:

public static OptimizedPubSub getInstance(String host, int port, String auth, long timeout)

Vydání/zrušení odběrů vzorů pomocí:

public ChannelFuture psubscribe(String... patterns)
public ChannelFuture punsubscribe(String... patterns)

můžete ignorovat vrácenou ChannelFuture, pokud nechcete mít 100% jistotu, že váš požadavek projde (je asynchronní).

Vydat/zrušit odběry kanálů pomocí:

public ChannelFuture subscribe(String... channels)
public ChannelFuture unsubscribe(String... channels)

Poté implementujte instance SubListener:

public interface SubListener {
    /**
     * Callback when a message is published on a subscribed channel
     * @param channel The channel the message was received on
     * @param message The received message
     */
    public void onChannelMessage(String channel, String message);

    /**
     * Callback when a message is published on a subscribed channel matching a subscribed pattern
     * @param pattern The pattern that the channel matched
     * @param channel The channel the message was received on
     * @param message The received message
     */
    public void onPatternMessage(String pattern, String channel, String message);
}

a zaregistrujte/zrušte registraci posluchačů pomocí:

public void registerListener(SubListener listener)
public void unregisterListener(SubListener listener)

OptimizedPubSub nikdy neblokuje a události jsou doručovány registrovaným SubListenerům asynchronně.

Vidlice je už trochu stará, takže vám v současné podobě nemusí být k užitku, ale můžete snadno stáhnout zdroj v tomto balíčku a postavit jej samostatně. Závislosti jsou Jedis a Netty.

Omlouvám se, že jsem neměl komplexnější řešení.




  1. Couchbase XDCR Replication – Krok za krokem – Nejlepší postupy

  2. Jak úplně odstranit pole z dokumentu MongoDB?

  3. Redis pipeline pořadí provedení

  4. Zdokonalování umění automatizace a správy nejoblíbenějších databází s otevřeným zdrojovým kódem:2017 @ Somenines