mysql设定
1. 创建表结构:
(源码路径)\zipkin-storage\mysql\src\main\resources\mysql.sql
2. zipkin的存储设置为mysql(collector设置为kafka)
java -server -jar zipkin-server-2.6.-exec.jar --zipkin.storage.type=mysql --zipkin.storage.mysql.host=10.4.122.89 --zipkin.storage.mysql.port= --zipkin.storage.mysql.username=eop --zipkin.storage.mysql.password=eop123 --zipkin.storage.mysql.db=eop --zipkin.collector.kafka.zookeeper=10.4.120.77:
在配置的时候注意其实有两套report的FactoryBean(都在zipkin-reporter-springs-beans.jar下面),一套是report级别的(AsyncReporterFactoryBean),一套是report下面sender级别的senderFactoryBean(KafkaSenderFactoryBean,OkHttpSenderFactoryBean,RabbitMQSenderFactoryBean,URLConnectionSenderFactoryBean);对于kafka需要使用的是KafkaSenderFactoryBean;
kafka
之前碰到一个奇怪的问题,就是客户端就是调不通了,后来我写了一段java代码模拟producer,打出详细日志,才发现原来是因为kafka client端访问zookeeper,获取的是机器名称,但是我本地没有配置这个名称的ip映射导致;这个其实和之前的hbase的异常是一样;凡是通过zookeeper来获取机器的场景都要小心,本地一定要配置DNS。
kafka调通了,但是发现zipkin没有接收到日志信息;怎么回事?后来通过阅读源码“${zipkin-master}\zipkin-autoconfigure\collector-kafka\src\main\java\zipkin\autoconfigure\collector\kafka下面的三个类,知道配置的参数应该是zipkin.collector.kafka.zookeeper;修改参数名称之后,成功接收。
其实类似的对于各种collector以及storage获取其配置参数就看源码即可,XXCollectorProperties,@ConfigurationProperties(“XX”)里面的XX就是前缀,字段就是要填充到XX.fileldName的;比如kafka中:
@ConfigurationProperties("zipkin.collector.kafka")
class ZipkinKafkaCollectorProperties {
private String topic = "zipkin";
private String zookeeper;
private String groupId = "zipkin";
... ...
}
那么可以获知他的参数列表为zipkin.collector.kafka.zookeeper,zipkin.collector.kafka.topic,zipkin.collector.kafka.groupId等等。
zipkin日志异常分析
原来是因为restTemplate的获取,好用的是使用restTemplate的@autowire的方式,但是如果使用@autowired导致的异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appServer': Unsatisfied dependency expressed through field 'restTemplate': No qualifying bean of type [org.springframework.web.client.RestTemplate] found for dependency [org.springframework.web.client.RestTemplate]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.client.RestTemplate] found for dependency [org.springframework.web.client.RestTemplate]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.client.RestTemplate] found for dependency [org.springframework.web.client.RestTemplate]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
原因就是这个@Autowired声明必须要有bean定义,但是当前的工程极简,根本没有spring的配置文件来配置这个字段,但是可以采用“监守自盗”的方式,就是在一个类中声明既声明了bean,也声明了@autowired;为什么要做这么做?因为@autowired声明后,spring将会管理这个对象的生命周期,就可以在这个对象创建的前后放入钩子(拦截器)对其进行处理,比如zipkin就是通过spring拦截了restTemplate的创建,使其可以拦截restTemplate的invokeUrl方法,实现日志收集。
@Autowired
RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
后来又碰到了一个问题,就是gateway异常;后来才发现因为appServer的eureka没有配置(调试上面问题的时候,从别的好用的程序拷贝过来application.properites,内容直接干掉了,好用的那段配置没有配eureka);后来添加上了问题解决;但是我发现一旦这种情况发生,zuul竟然就崩溃了,再也无法提供服务?
dubbo的web工程没有反应了?
因为没有配置Spring,需要在WEB-INF下面添加一些spring相关的位置xml;
为什么调不通spring-app?
没加@RestController,所以mapping没有创建,这一点从日志可以看到,没有mapping /cloud/{name};
后来重启一次好了;zuul只有遇到了一些跳转的异常,就挂在那个地方了,及时后面正常请求也无法处理。
zuul为什么报错?
因为portal采用的是post方式提交请求;app的方法使用@GetMapping声明的,所以zuul通过post去访问app,超时结束。改为app的方法改为RequestMapping(接收任何http方法)问题解决。
方法还是很重要,我在A工程测试访问B工程可以形成一条链,我在C工程写法和A类似,访问E工程,无法形成一条链;于是开始搞C怎么和E没有反应呢?没有头绪,无法确定到底是C问题还还是E问题?
后来修改方案,直接让A工程调用E工程,OK,形成链!说明是C工程问题;
继续A采用的是spring+注入httpClient,B采用的spring + 静态方法httpClient(客户的遗留代码不是spring,这里主要是测试非注入方式是否可用,利用spriing只不过是为了快速搭建Web工程)。开始是主攻为什么静态的就不行呢?后来调整方案,先让B和A采用相同的结构,先保证A→E形成一条链,再根据spring的原理来改造B工程,这样始终都是基于成功的demo进行修改,保证开发的方向。
- 烂泥:NFS做存储与KVM集成
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前有关NFS的文章,我们介绍的都是NFS的使用挂载等等.这篇文章我们介绍有关NFS作为存储使用. 既然本篇文章的主题是有关NFS的,我们还是先把NFS ...
- 【转帖】IBM发布全新闪存解决方案,助企业存储架构做减法
IBM发布全新闪存解决方案,助企业存储架构做减法 http://stor-age.zhiding.cn/stor-age/2020/0227/3124851.shtml 感觉 配图弄错了 FlashS ...
- redis代替kafka做缓存队列
前言:刚上线elk一个月左右,使用的kafka作为缓存队列,但是不知道为何,中间发生过好几次,elk突然没数据了,长达好几天都没有, 折腾了好久,好了,过几天又发生同样的状况.经查找,数据是 ...
- Mysql增量写入Hdfs(一) --将Mysql数据写入Kafka Topic
一. 概述 在大数据的静态数据处理中,目前普遍采用的是用Spark+Hdfs(Hive/Hbase)的技术架构来对数据进行处理. 但有时候有其他的需求,需要从其他不同数据源不间断得采集数据,然后存储到 ...
- Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)
标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...
- mysql 的 存储结构(储存引擎)
1 MyISAM:这种引擎是mysql最早提供的.这种引擎又可以分为静态MyISAM.动态MyISAM 和压缩MyISAM三种: 静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的, ...
- python---scrapy之MySQL同步存储
假设我们已经能获取到item里定义的字段的数据,接下来就需要保存item的数据到mysql数据库. pipeline用来存储item中的数据,将爬取到的数据进行二次处理 首先,要做的准备的工作,安装M ...
- MySQL的存储引擎与日志说明
1.1 存储引擎的介绍 1.1.1 文件系统存储 文件系统:操作系统组织和存取数据的一种机制.文件系统是一种软件. 类型:ext2 3 4 ,xfs 数据. 不管使用什么文件系统,数据内容不会变化, ...
- MySQL常用存储引擎及如何选择
一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...
随机推荐
- maven和gradle中,dependency和plugin的区别
dependency引入的东西 作用:代码编译/运行时所需要的东西 打包:项目打包后这些东西基本都在(一般都在). 例如:JSON工具包GSON(com.google.code.gson),不仅开发时 ...
- 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)
构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ...
- Cooperation.GTST团队第二周项目总结
项目进展 这周我们把工作主要放在了UI界面的实现上,为了让整款APP看上去能够更加高大上,我们决定采用Android 5.0开始推出的一个Material Design风格的导航控件Toolbar. ...
- Gym 101147A The game of Osho(SG找规律)
https://vjudge.net/problem/Gym-101147A 题意:给出G组数,每组数包括两个数B,N,两玩家轮流取数,使得N-num,num<=N并且num是N的整次幂.判断谁 ...
- Java中代码点与代码单元(转)
摘要 本文介绍 Java 平台支持增补字符的方式.增补字符是 Unicode 标准中代码点超出 U+FFFF 的字符,因此它们无法在 Java 编程语言中描述为单个的 16 位实体(例如char数据类 ...
- 将 R 整合到 markdown 中
markdown 易于写入和读取,具有编写报告的必要功能,例如简单的文本格式,嵌入图片.链接.表.引用.数学公式以及代码块.虽然在 markdown 中编写纯文本很容易,但是创建具有许多图片和表格的报 ...
- Command(命令)
意图: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 适用性: 抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(call ...
- GNU m4 教程[转]
原文:http://blog.csdn.net/timekeeperl/article/details/50738164 作者:garfileo 作者主页 本文整理自:https://segment ...
- Rails-Treasure chest1 (自定义Model网址;多语言包; 时区设置, TimeZone类; 格式日期时间; 表单单选UI; 表单多选UI;Select2 Plugin)
自定义Model网址: 随机值网址SecureRandom.base58 多语言包, 包括默认语言设置和user自设置. 时区设置, TimeZone类 ,增加user自选时区功能 格式日期时间: x ...
- bzoj2120: 数颜色 带修莫队
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P ...