怎么用手机自己做网站,网站免费优化,wordpress主题手机制作,怎么给网站做网页sidecar在上一篇博客文章中#xff0c;我描述了Sidecar应用程序如何用于在Eureka中注册Cassandra节点#xff0c;更一般地#xff0c;它可以用于在Eureka中注册任何非JVM应用程序。 在本文中#xff0c;我将介绍应用程序如何查询Sidecar注册节点。 发现注册节点–初始化后… sidecar 在上一篇博客文章中我描述了Sidecar应用程序如何用于在Eureka中注册Cassandra节点更一般地它可以用于在Eureka中注册任何非JVM应用程序。 在本文中我将介绍应用程序如何查询Sidecar注册节点。 发现注册节点–初始化后 如果在bean初始化阶段不需要注册的节点则沿着以下方向很容易发现节点 Component
public class SampleCommandLineRunner implements CommandLineRunner {Autowiredprivate DiscoveryClient discoveryClient;PostConstructpublic void postConstruct() {
// System.out.println(Printing from postConstruct);
// printDiscoveredNodes();}Overridepublic void run(String... strings) throws Exception {System.out.println(Printing from run method);printDiscoveredNodes();}public void printDiscoveredNodes() {System.out.println( Printing Discovered Nodes );for (ServiceInstance instance: discoveryClient.getInstances(samplecassandra.vip)) {System.out.println(Host: Port instance.getHost() : instance.getPort());}}
} 这些将打印以“ samplecasssandra.vip” VIP名称注册的节点。 请注意节点是通过run方法打印的该方法在Spring容器的初始化之后被调用。 但是如果尝试从某个生命周期阶段中列出节点请说postConstruct方法那么很有可能会引发异常此行为在Spring Cloud的“ Angel.SR3”版本中可见但似乎可以与“ Brixton。*”版本 发现注册节点–初始化期间 现在如果应用程序需要在初始化期间发现节点则流程会稍微复杂一点有关潜在问题请查看此工单 。 DiscoveryClient在Spring生命周期的很晚才初始化并且如果在任何bean的后处理活动中使用DiscoveryClient则很可能会引发异常。 例如假设应用程序现在使用Sidecar注册的Cassandra节点被应用程序用来初始化Cassandra连接一种实现方法是用以下方式围绕Cassandra连接创建包装器 import org.springframework.data.cassandra.core.CassandraTemplate;public class CassandraTemplateWrapper extends CassandraTemplate {Overridepublic void afterPropertiesSet() {}
} 在这里CassandraTemplate被重写以防止在afterPropertiesSet方法中检查是否存在Cassandra会话因为该会话将在启动周期的更晚时间建立。 可以将Cassandra会话懒惰地注入到实现SmartLifecyle的bean中的以下自定义CassandraTemplate中 package mvctest.cassandra;import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.SmartLifecycle;
import org.springframework.core.Ordered;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Component;Component(cassandraTemplate)
public class EurekaCassandraTemplateFactoryBean implements SmartLifecycle, FactoryBeanCassandraTemplate, Ordered {....Overridepublic boolean isAutoStartup() {return true;}Overridepublic void start() {LOGGER.info(About to start Discovery client lookup of Cassandra Cluster!!!);final Cluster cluster this.eurekaClusterBuilder.build();Session session cluster.connect(this.cassandraProperties.getKeyspace());this.cassandraTemplateWrapper.setSession(session);LOGGER.info(Completed Discovery client lookup of Cassandra Cluster!!!);running true;}Overridepublic boolean isRunning() {return this.running;}Overridepublic int getPhase() {return Integer.MAX_VALUE;}Overridepublic int getOrder() {return 1;}
} 这样Cassandra会话可以在周期的后期创建。 有点粗糙但是这种方法可行。 如果您有兴趣进一步探索此示例请在以下位置获得此代码 我的github仓库在这里 。 翻译自: https://www.javacodegeeks.com/2015/09/spring-cloud-sidecar-initialization-of-nodes.htmlsidecar