Spring Cloud 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, FactoryBean<CassandraTemplate>, 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.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows服务器的DDOS防御,

抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞。要实施 SYN 洪水攻击&#xff0c;攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列。这会禁止其他用户建立网络连接。 要保护网络抵御 SYN 攻击&#xff0c;请按照下面这些通用步骤操作&…

java传.net datetime_.net调java写的webService传过去的datetime,int等非string类型为null的问题...

使用.NET向webService传double、int、DateTime 服务器得到的数据时null的问题 收藏用C#.NET调用Java开发的WebService时&#xff0c;先在客户端封装的带有int属性的对象&#xff0c;当将该对象传到服务器端时&#xff0c;服务器端可以得到string类型的属性值&#xff0c;却不能…

arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

风过无痕 原文 arcengine,深入理解游标Cursors&#xff0c;实现数据的快速查找&#xff0c;插入&#xff0c;删除&#xff0c;更新 深入理解游标Cursors&#xff0c;实现数据的快速查找&#xff0c;插入&#xff0c;删除&#xff0c;更新 1、查找数据Search Cursors //by yl …

guice 框架_玩! 框架+ Google Guice

guice 框架在我目前正在工作的项目中&#xff0c;我们开始使用Google Guice。 对于那些不知道的人&#xff0c; Google Guice是一个依赖项注入框架。 依赖项注入的基本思想是提供一个其依赖的类&#xff0c;而不是使依赖类负责实例化它所依赖的对象。 Play具有用于整合Guice的模…

js中,实现对键盘按键的监听:

<script>function keyUp(e) { var currKey0,ee||event; currKeye.keyCode||e.which||e.charCode; var keyName String.fromCharCode(currKey); alert("按键码: " currKey " 字符: " keyName); } document.onkeyup keyUp;</scrip…

java程序运行结果题_2016年关于Java编程与程序运行结果笔试题

2016年关于Java编程与程序运行结果笔试题1.Java编程,打印昨天的当前时刻public class YesterdayCurrent{public void main(String[] args){Calendar cal Calendar.getInstance();cal.add(Calendar.DATE, -1);System.out.println(cal.getTime());}}2.文件读写,实现一个计数器pu…

Hystrix简介– Hello World

在先前的博客文章中&#xff0c;我谈到了需要像Netflix Hystrix这样的库的动机。 在这里&#xff0c;我将跳入一些非常基本的方法来开始使用Hystrix&#xff0c;并在更复杂的用例中进行后续介绍。 你好&#xff0c;世界 以下是“ Hystrix命令”的一个简单的Hello World示例&am…

Unity 继承MonoBehaviour下方法通过鼠标触控与物体交互

要通过鼠标的进入、离开、悬停、拖拽等动作实现与物体的交互时&#xff0c;我们可以使用继承MonoBehaviour的脚本下的与鼠标相关的方法。具体有以下方法&#xff1a; //当鼠标按下时被调用private void OnMouseDown(){Debug.Log("鼠标按下了");}//当鼠标按下并拖动时…

Collection中list集合的应用常见的方法

集合 &#xff1a; 用存放对象的容器(集合) Collection &#xff1a; 跟接口 &#xff1a; 单列集合 ---> List :有序的 &#xff0c;元素是可以重复的。 ---> Set : 无序的 &#xff0c;元素是不可以重复的。 Collectionz红常用的方…

js base64编码 java 解码_JavaScript字符串的Base64编码与解码

有时文本里包含一些不可打印的符号&#xff0c;而你需要把它们传输到服务器&#xff0c;这时我们会需要用到Base64编码。或者你需要把一个图片内容以文本格式嵌入到网页中&#xff0c;这时你也会用到 Base64 编码。所谓 Base64 是一种基于64个可打印字符来表示二进制数据的方法…

linux cmake 安装mysql5.5.11_以及更高版本_linux cmake 安装mysql5.5.11,以及更高版本

1、下载mysql5.5.12和cmakewgethttp://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.12-linux2.6-i686.tar.gzwget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz2、安装cmakemkdir /usr/local/cmake切换到存放cmake-2.8.4.tar.gz到目录tar zxvfcmake-2.8.4.tar.gzcd cm…

iOS中如何监测来电

http://blog.csdn.net/liujinlongxa/article/details/44207587转载于:https://www.cnblogs.com/it-k-50/p/6122844.html

maven 构建依赖树_Maven构建依赖项

maven 构建依赖树熟悉发行版和快照依赖关系的Maven和Gradle用户可能不了解TeamCity快照依赖关系&#xff0c;或者假定他们与Maven相关&#xff08;这是不正确的&#xff09;。 熟悉工件和快照相关性的TeamCity用户可能不知道&#xff0c;除了TeamCity提供的功能之外&#xff0c…

ssh图片上传 java_ssh上传并显示图片

struts部分&#xff1a;attribute"upfileForm"input"/upload/uploadfile.jsp"name"upfileForm"path"/upfile"scope"request"validate"true"type"com.yourcompany.struts.action.UpfileAction">publi…

安卓手机移动端页面为body设置overflow:hidden;不起作用

动态的改变body的样式&#xff0c;测试了可行 var scrollTop $("body").scrollTop();//body设置为fixed之后会飘到顶部&#xff0c;所以要动态计算当前用户所在高度 $("body").css({overflow:hidden,position: fixed,top: scrollTop*-1 }); $loadMask.css…

责任链设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

HDU 5944 Fxx and string(暴力/枚举)

传送门 Fxx and string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 1007 Accepted Submission(s): 422 Description Problem DescriptionYoung theoretical computer scientist Fxx get a string which co…

经典的java程序_Java经典程序

}}}-----------------结果&#xff1a;ABDCBDCB-----------------2.写出程序运行结果import java.lang.StringBuffer;public class Test2{public static void stringReplace(String str){str str.replace(j,i);}public static void bufferReplace(StringBuffer sbf){sbf sbf.…

继续OI

NOIP2016于2016.11.20日12:00正式结束。 我作为oi的生涯 或许会结束&#xff1f; 或者继续&#xff1f; 然而前途依然迷茫&#xff0c;我是否应该继&#xff1f;或是放弃&#xff1f; 距离省选还有3~4个月&#xff0c;我该何去何从&#xff1f; 虽然已经经历过联赛&#xff0c;…

java存储过程示例_安全密码存储–请勿做的事和Java示例

java存储过程示例安全存储密码的重要性 作为软件开发人员&#xff0c;我们最重要的职责之一就是保护用户的个人信息。 如果没有我们应用程序的技术知识&#xff0c;用户别无选择&#xff0c;只能相信我们正在履行这一责任。 令人遗憾的是&#xff0c;在密码方面&#xff0c;软件…