当前位置: 首页 > 知识库问答 >
问题:

Dropwizard会话群集

方弘
2023-03-14

我需要一种跨不同dropwizard web服务共享会话的方法。在Jetty中,有一种方法可以做到这一点,即使用JDBCSessionManager和jdbcssessionmanager(http://wiki.eclipse.org/Jetty/Tutorial/Session_Clustering).

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

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

谢谢,
亚历克斯

共有2个答案

瞿博学
2023-03-14

我用黑泽尔卡斯特(http://hazelcast.org)代替。这是否过分取决于你到底想要实现什么,以及你是否有能力在代码中拥有另一个依赖项。但就灵活性和易于实现而言,我肯定会推荐它。

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

你可以在这里看一些例子:http://hazelcast.org/use-cases/clustering/和http://hazelcast.org/use-cases/caching/

欧阳洲
2023-03-14

我能够通过与生命周期挂钩来让它工作。

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;
        }
    });
}
 类似资料:
  • 我正在寻找一个持久的会话管理器,将会话保存在文件系统(如PHP)上,可以与DropWizard一起使用。我看到有一个<code>环境。getSessionHandler(),但我没有看到关于它的文档。 我可以写我自己的,但我希望有一个煮熟的饭。上面的会话句柄是我要找的吗?如何使用它?

  • 目前,我正在尝试在Google云上创建一个Kubernetes集群,其中包含两个负载平衡器:一个用于后端(在Spring boot中),另一个用于前端(在Angular中),其中每个服务(负载平衡器)与两个副本(POD)通信。为了实现这一点,我创建了以下入口: 上面提到的入口可以使前端应用程序与后端应用程序提供的REST API进行通信。但是,我必须创建粘性会话,以便每个用户都与同一个POD进行通

  • 我正在研究Flink 1.9.1的docker/k8s部署可能性。 我看完了[1][2][3][4]。 目前,我们确实认为,我们将尝试采用工作集群方法,尽管我们想知道社区的这一趋势是什么?我们不希望每个Flink集群部署多个作业。 不管怎样,我想知道一些事情: > 在这两种情况下,Flink的UI都显示每个任务管理器有4个CPU。 如果使用作业群集,如何重新提交作业。我指的是这个用例。你可能会说我

  • 本文向大家介绍详解Tomcat集群如何同步会话,包括了详解Tomcat集群如何同步会话的使用技巧和注意事项,需要的朋友参考一下 Tocmat集群中最重要的交换信息就是会话消息,对某个tomcat实例某会话做的更改要同步到集群其他tomcat实例的该会话对象,这样才能保证集群所有实例的会话数据一致。在tribes组件的基础上完成这些工作就相当容易些,tribes是tomcat实现的一个通信框架。 如

  • 我正在尝试使用dropwizer-日记本来安排工作。在我的预定工作中,我需要访问我的DAO。每当我计划的作业运行时,我都会收到以下错误... 我试图使用这个链接中描述的方法,https://github.com/timmolter/XDropWizard在注入全局对象或配置参数到作业一节中 这是我的申请代码: 这是我预定的工作: 我正在获取DAO,它们不是空的,但它们不绑定到任何会话。我该怎么解决