【问题标题】:Dropwizard Session ClusteringDropwizard 会话集群
【发布时间】:2018-03-13 03:45:57
【问题描述】:

我需要一种方法来在不同的 dropwizard Web 服务之间共享会话。在 Jetty 中有一种方法可以使用 JDBCSessionIdManager 和 JDBCSessionManager (http://wiki.eclipse.org/Jetty/Tutorial/Session_Clustering)。

问题在于 dropwizard (0.7.1) 没有公开所需的 org.eclipse.jetty.server.Server 的引用,因此没有明显的方法可以更改 SessionManager 和 SessionIdManager。 我已经看到服务器是在 io.dropwizard.cli.ServerCommand#run 通过 io.dropwizard.server.ServerFactory 创建的,但是 io.dropwizard.cli.ServerCommand#run 中的引用是本地的,所以我什至不能使用反射以获得我想要的参考。

我应该在 dropwizard 中做什么来更改 SessionManager 和 SessionIdManager?

谢谢,
亚历克斯

【问题讨论】:

    标签: java jetty dropwizard session-management


    【解决方案1】:

    我能够通过连接到生命周期来让它工作。

    private void addSessionHandler(final Environment env, final DataSource dataSource) {
        env.lifecycle().addLifeCycleListener(new AbstractLifeCycleListener() {
            @Override
            public void lifeCycleStarting(LifeCycle event) {
                if (!(event instanceof Server)) {
                    return;
                }
    
                Server server = (Server) event;
                JDBCSessionIdManager ids = jdbcSessionIdManager(server);
                server.setSessionIdManager(ids);
                env.servlets().setSessionHandler(new SessionHandler(jdbcSessionManager(ids)));
            }
    
            private JDBCSessionManager jdbcSessionManager(JDBCSessionIdManager idManager) {
                JDBCSessionManager m = new JDBCSessionManager();
                m.setSessionIdManager(idManager);
                return m;
            }
    
            private JDBCSessionIdManager jdbcSessionIdManager(Server server) {
                JDBCSessionIdManager m = new JDBCSessionIdManager(server);
                m.setWorkerName("");
                m.setDatasource(dataSource);
                return m;
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

      我改用 Hazelcast (http://hazelcast.org)。 这是否矫枉过正取决于您到底想要实现什么,以及您是否有能力在代码中拥有另一个依赖项。但就灵活性和易于实施而言,我绝对会推荐它。

      我将其用作分布式地图,而不是将数据存储在会话本身中。

      您可以在这里查看一些示例:http://hazelcast.org/use-cases/clustering/http://hazelcast.org/use-cases/caching/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2011-04-24
        • 1970-01-01
        相关资源
        最近更新 更多