??xml version="1.0" encoding="utf-8" standalone="yes"?>一区二区三区四区日本视频,丰满白嫩尤物一区二区,久久久91精品http://www.aygfsteel.com/zzzlyr/articles/435886.html׃a׃aFri, 04 Jun 2021 07:36:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/435886.htmlhttp://www.aygfsteel.com/zzzlyr/comments/435886.htmlhttp://www.aygfsteel.com/zzzlyr/articles/435886.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/435886.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/435886.html整体架构
从日志生成到抓取、存储、分析、展现的多个pȝ间交互过E?/span>


image

EagleEye 的核?/h1>
  • TraceId

在复杂的分布式系l环境下QEagleEye是一个有q泛用途的调用分析和问题排查工兗与一般的调用信息埋点日志相比QEagleEye埋点的一个显著的不同点在于它的每条日志都有与每次h兌的上下文IDQ我们称为TraceId。通过TraceIdQ后期的日志处理时可以把一ơ前端请求在不同服务器记录的调用日志兌hQ重新组合成当时q个h的调用链。因此,EagleEye不仅可以分析到应用之间的直接调用关系Q还可以得到他们的间接调用关pR以及上下游的业务处理信息;对于调用铄底层pȝQ可以追溯到它的最上层h来源以及中间l过的所有节点;对于调用铄上层入口Q可以收集到它的整棵调用树,从而定位下游系l的处理瓉Q当下游某个应用有异常发生时Q能q速定位到问题发生的位|?/span>

image

如上图所C,应用A是接受到来自用户览器的Webh的前端服务器Q它是一条调用链的开始端Q在TBSession和EagleEyeFilter中都做了EagleEye上下文埋炏V请求收到后它会先调用EagleEye StartTrace生成TraceIdq放|在当前U程的ThreadLocalQ日志埋点请求信息(如URL、SessionId、UserId{)。在h处理完毕提交相应Ӟ再调用EndTrace清理U程中的EagleEye信息?在应用A调用应用B、C的HSF服务Q或者发送Notify消息ӞTraceId被包含在EagleEye上下文中Q随|络h到达应用B、C、D、E之中Qƈ攄在线EThreadLocal内,因此后箋调用到的q些pȝ都会有EagleEyeq次h的上下文。这些系l再发v|络hӞ也类似的携带了上下文信息的?/p>

  • RpcId

Z区别同一个调用链下多个网l调用的序和嵌套层ơ,EagleEyeq需要传输和记录RpcId?RpcId?.X1.X2.X3.....Xi来表C,Xi都是非负整数Q根节点的RpcId固定?开始,W一层网l调用的RpcId?.X1Q第二层的则?.X1.X2Q依ơ类推?例如Q从根节点发出的调用的RpcId?.1?.2?.3QRpcId?.1的节点发出的RpcId则ؓ0.1.1?.1.2?.1.3。如下图所C?/p>

image


通过RpcIdQ可以准的q原用链上每ơ调用的层次关系和兄弟调用之间的先后序?例如上图应用 G 的两ơ调?.2.1.1?.1.2.1Q可以看出对 DB 的访?.2.1.1源于 C ?G 的调?.2.1Q对 Tair 的访?.1.2.1源于B ?G 的调?.1.2?很多调用场景会比上面说的完全同步的调用更为复杂,比如会遇到异步、单向、广播、ƈ发、批处理{等Q这时候需要妥善处理好ThreadLocal上的调用上下文,避免调用上下文؜乱和无法正确释放。另外,采用多序号的RpcId设计Ҏ会比单序号递增更容易准还原当时的调用情况?/span>





׃a 2021-06-04 15:36 发表评论
]]>
SpringBoot异步及线E池配置(jdk8新增加线E支持CompletableFuture)http://www.aygfsteel.com/zzzlyr/articles/435305.html׃a׃aWed, 25 Mar 2020 12:19:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/435305.htmlhttp://www.aygfsteel.com/zzzlyr/comments/435305.htmlhttp://www.aygfsteel.com/zzzlyr/articles/435305.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/435305.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/435305.html阅读全文

׃a 2020-03-25 20:19 发表评论
]]>
spring boot redis 配置http://www.aygfsteel.com/zzzlyr/articles/432728.html׃a׃aMon, 07 Aug 2017 09:38:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/432728.htmlhttp://www.aygfsteel.com/zzzlyr/comments/432728.htmlhttp://www.aygfsteel.com/zzzlyr/articles/432728.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/432728.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/432728.html
  <!-- redis 配置-->
 <dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
 <version>2.8.1</version>
 </dependency>
 <dependency>
 <groupId>org.springframework.data</groupId>
 <artifactId>spring-data-redis</artifactId>
 <version>1.7.2.RELEASE</version>
 </dependency>
<!-- end redis 配置-->

2Q?在spring boot   *.properties 配置文g中增加连接配|:
     spring.redis.hostName=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=
    spring.redis.pool.maxActive=8
    spring.redis.pool.maxWait=-1
    spring.redis.pool.maxIdle=8
    spring.redis.pool.minIdle=0
    spring.redis.timeout=0
3Q?spring boot 中增加redis 配置q接
      /**
 * Created by Administrator on 2017/2/27.
 
*/
@Configuration
@EnableAutoConfiguration
public class RedisConfig {

    private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);

    @Bean
    @ConfigurationProperties(prefix="spring.redis")
    public JedisPoolConfig getRedisConfig(){
        JedisPoolConfig config = new JedisPoolConfig();
        return config;
    }
  @Bean
    @ConfigurationProperties(prefix="spring.redis")
    public RedisConnectionFactory jedisConnectionFactory(){
        return new JedisConnectionFactory(getRedisConfig());
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate(){
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        //q个~存key的序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        //讄redis 转换 value 通过jdk序列化方法,GenericJackson2JsonRedisSerializer q个是json形式
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }

    /**
     * q个是redis 多值操作返回模版对象。比如:map,set ,list {?br />     * 
@return
     
*/  @Bean
    public ValueOperations<String, Object> valueOperations(){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        //q个~存key的序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //q个~存value的序列化方式,通过有jdk序列化,q个是json 序列?/span>
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setExposeConnection(true);
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.afterPropertiesSet();
        return redisTemplate.opsForValue();
    }
}
4: RedisTemplate 使用
   @Service
public class RedisServiceImpl implements RedisService{
    @Autowired
    private RedisTemplate redisTemplate;
    public boolean expire(final String key, long expire,final TimeUnit unit) {
        return redisTemplate.expire(key, expire, unit);
    }
    @Override
    public void setList(String key, List<String> list, long expire, TimeUnit unit) throws Exception {
        redisTemplate.delete(key);
        redisTemplate.opsForValue().set(key,list,expire,unit);
    }
    public List<String> getList(String key) {
        return (List<String>)redisTemplate.opsForValue().get(key);
    }
    public void remove(String key){
        redisTemplate.delete(key);
    }
    @Override
    public void setKey(String key, String s, long expire, TimeUnit unit) {
        redisTemplate.opsForValue().set(key,s,expire,unit);
    }
    
    @Override
    public String getKey(String key) {
        return (String) redisTemplate.opsForValue().get(key);
    }
    @Override
    public Object getKeyForObject(String key) {
        return redisTemplate.opsForValue().get(key);
    }
    @Override
    public void setMap(String key, Map<String, Object> map, long expire, TimeUnit unit) throws Exception {
        this.expire(key,expire,unit);
        redisTemplate.opsForHash().putAll(key,map);
    }
      @Override
    public void removeKeyForMap(String key, String mapKey) {
        redisTemplate.opsForHash().delete(key,mapKey);
    }
    @Override
    public void putMapKey(String key, String mapKey, String mapValue) {
        redisTemplate.opsForHash().put(key,mapKey,mapValue);
    }
    public Set<String> keys(String o ){
        return redisTemplate.keys(o);
    }
}

5Q单元测试类

RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApplication.class)// 指定spring-boot的启动类
//相当? --spring.profiles.active=dev
@ActiveProfiles(value = "dev")
public class RedisCacheTest {
    protected final Logger logger = Logger.getLogger(this.getClass());
    @Autowired
    private RedisService redisService;
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void CacheTest() throws Exception {
        redisService.setKey("111111","222222",100, TimeUnit.SECONDS);
        redisService.getKey("111111");
    }
    @Test
    public void SaveObjectForCacheTest()throws Exception{
        TargetDB targetDB=new TargetDB();
        targetDB.setDbType("111");
        targetDB.setPort("22");
        targetDB.setUserName("zzzlyr");
        redisTemplate.opsForValue().set("key111",targetDB);
        TargetDB targetDB12= (TargetDB) redisTemplate.opsForValue().get("key111");
        System.out.println(targetDB12.toString());
    }
      @Test
    public void SaveMapForCacheTest()throws Exception {
        TargetDB targetDB = new TargetDB();
        targetDB.setDbType("111");
        targetDB.setPort("22");
        targetDB.setUserName("zzzlyr");
        List<TargetDB> list = new LinkedList<TargetDB>();
        list.add(targetDB);
        Map<String, List<TargetDB>> map = new LinkedHashMap<String, List<TargetDB>>();
        map.put("111111111111", list);
        //向缓存中攑օmap
        redisTemplate.opsForHash().putAll("zzzzz", map);
        //从缓存中获取map
        Map<String, List<TargetDB>> cacheMap = redisTemplate.opsForHash().entries("zzzzz");
        //Map<String,List<String>> cacheMap= (Map<String, List<String>>) redisTemplate.opsForValue().get("platform-app_AppOperation");
        System.out.println(cacheMap.toString());
    }
}


׃a 2017-08-07 17:38 发表评论
]]>
spring cloud eureka 使用问题http://www.aygfsteel.com/zzzlyr/articles/432642.html׃a׃aTue, 04 Jul 2017 10:30:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/432642.htmlhttp://www.aygfsteel.com/zzzlyr/comments/432642.htmlhttp://www.aygfsteel.com/zzzlyr/articles/432642.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/432642.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/432642.html org.springframework.boot spring-boot-starter-data-redis --> q样spring admin 健康发?.properties没配|redis,但是spring-boot-starter-data-redis 有默认配|?是localhost), 会导致检不通过Qeureka 昄状态ؓ down(1). 处理q样问题可以使用Qhttp://eureakIP:port/health 如果没有问题会返回:{"description":"Spring Cloud Eureka Discovery Client","status":"UP"} 如果有问题会q回那个实例的检什么配|项没有通过Q只要修改后重启应用实例Q这样eureka应用会显CUP(1);

׃a 2017-07-04 18:30 发表评论
]]>
spring boot 注解@Transactional事务cd调用不生效问题及解决办法http://www.aygfsteel.com/zzzlyr/articles/432618.html׃a׃aTue, 20 Jun 2017 09:03:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/432618.htmlhttp://www.aygfsteel.com/zzzlyr/comments/432618.htmlhttp://www.aygfsteel.com/zzzlyr/articles/432618.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/432618.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/432618.html1: Java注解@Transactional事务cd调用不生效问题及解决办法
?Spring ?AOP 代理下,只有目标Ҏ由外部调用,目标Ҏ才由 Spring 生成的代理对象来理Q这会造成自调用问题?br />若同一cM的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回滚

2:场景问题Q?br />
比如Q一个class Ac?中有三个Ҏ a(),b(),c(),d()
@Transactional
a();
@Transactional
b();

@Transactional
c(){
this.a();
this.b();
}

如果同一个类中:
@Transactional
d(){
this.c();
}

q样d() @Transactional 会失效,如果出现异常Q事物不会回滚,原因?@Transactional 使用了spring proxy 代理对象 会被AOP拦截Q?br />this.c(),q样调用是本地对象调用,l心同学发现只有 最外层使用代理对象可以 @Transactional生效?br />
解决ҎQ?br />1Q最单的一U在自己实现cM注入自己 例:
@Autowired
private Class class;

q样可以走spring IOC 容器Q出来就是proxy 对象;

2:W二咱方式是通过AopContext.currentProxy()方式

增加maven依赖Q?br /> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency> 如果存在忽略q个

如果是springboot工程在main Ҏ上增?@EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass = true)
例:
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass = true)
public class CommonComponentStartApplication {
public static void main(String[] args) {
SpringApplication.run(CommonComponentStartApplication.class, args);
}
}

然后可以在上面的例子中d()中这样用:
@Transactional
d(){
Class class= ((Class)AopContext.currentProxy());
class.c();
}

3:W三U?是通过 applicationcontext 获取 bean

Mq几U方法都是ؓ了得到spring proxy对象,看个人喜好选择?/pre>

׃a 2017-06-20 17:03 发表评论
]]>
վ֩ģ壺 ѭ| | | ȷɽ| Т| ƽ| | ʡ| | Ϫ| | | | | | | ͭϿ| Ӧñر| ƺ| ̨| ɽ| | | | ƽ| | | ͨ| | | ߰| ʡ| | | ϳ| | ̨| Ī| ʲ| | |