花辭

風月不瘦,雖以千年後。


  • 首頁

  • 關於

  • 標籤

  • 分類

  • 歸檔

  • 站點地圖

  • 公益404

理解Java-CompleteService应用

發表於 2016-10-27 | 分類於 语言语法 | | 閱讀次數:

CompleteService使用场景

当我们需要批量任务处理,但是并不关心任务完成的先后顺序,我们异步的提交任务,等待有任务执行完成之后然后对该完成结果处理,如此循环直到该批量任务完成.
我们遵循异步处理完成后的操作原则时,谁先完成收割谁.

基于集合Future遍历处理

针对这种场景,我们很可能会想到把所有的异步任务收集到一个集合,然后遍历这个集合(Future),调用future.get()获取处理结果,进行后续操作,然后我们就会写出如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ExecutorService pool = Executors.newFixedThreadPool(5);
final List<String> dList = Arrays.asList("aa", "bb", "cc", "dd", "ee");
List<Future> fList= new ArrayList<Future>();
for(int i=0; i<dList.size(); i++){
final int tmp = i;
Future future = pool.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
if (tmp == 2) {
Thread.sleep(3000);
}
Thread.sleep(1000);
return "线程" + Thread.currentThread().getName() + "处理数据元素list(" + + tmp +") = " + dList.get(tmp) ;
}
});
fList.add(future);
}
System.out.println("聚合完成");
for (int i = 0; i < fList.size(); i++) {
System.out.println(fList.get(i).get());
}

执行这段代码,会发现执行结果并没有按照我们所预期的来

1
2
3
4
5
6
聚合完成
线程pool-1-thread-1处理数据元素list(0) = aa
线程pool-1-thread-2处理数据元素list(1) = bb
线程pool-1-thread-3处理数据元素list(2) = cc
线程pool-1-thread-4处理数据元素list(3) = dd
线程pool-1-thread-5处理数据元素list(4) = ee

可见,上面的执行结果并不是我们想要的,明显cc元素的执行比较耗时,但是我们的处理结果却是按照循环遍历的顺序来的,原因如下:

从list中遍历的每个Future对象并不一定处于完成状态,这时调用get()方法就会被阻塞住,如果系统是设计成每个线程完成后就能根据其结果继续做后面的事,这样对于处于list后面的但是先完成的线程就会增加了额外的等待时间。

閱讀全文 »

Hystrix服务熔断和降级

發表於 2016-09-23 | 分類於 入门教程 | | 閱讀次數:

在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就会因依赖关系形成故障蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构就更加的不稳定;为了解决这样的问题,因此产生了断路器模式.
在Spring Cloud中使用了Hystrix 来实现断路器的功能;Hystrix是Netflix开源的微服务框架套件之一,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力;Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能.

Ribbon熔断

工程结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ribbon-hystrix
├── pom.xml
├── src
│   └── main
│   ├── java
│   │   └── com
│   │   └── cloud
│   │   └── ribbon
│   │   └── hystrix
│   │   ├── Application.java
│   │   ├── service
│   │   │   └── RibbonService.java
│   │   └── www
│   │   └── RibbonController.java
│   └── resources
│   └── application.properties
閱讀全文 »

Sleuth分布式链路追踪

發表於 2016-09-12 | 分類於 入门教程 | | 閱讀次數:

Sleuth是SpringCloud生态中用于解决分布式链路调用追踪的组件, 微服务架构中要实现链路追踪只需要在客户端和服务端的应用中增加如下依赖即可.

Maven依赖

1
2
3
4
5
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>x.x.x.RELEASE</version>
</dependency>
閱讀全文 »

Zuul统一微服务网关

發表於 2016-09-11 | 分類於 入门教程 | | 閱讀次數:

Zuul是Netflix开源的微服务网关,用于提供动态路由,监控,弹性,安全等边缘服务.可以和Eureka、Ribbon、Hystrix等组件配合使用; Zuul组件的核心是一系列的过滤器;这些过滤器可以完成以下功能:

  • 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求
  • 审查与监控:
  • 动态路由: 动态将请求路由到不同后端集群.
  • 压力测试:逐渐增加指向集群的流量,以了解性能
  • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求.
  • 静态响应处理:边缘位置进行响应,避免转发到内部集群.
  • 多区域弹性:跨域AWS Region进行请求路由,旨在实现ELB(ElasticLoad Balancing)使用多样化.

Spring Cloud对Zuul进行了整合和增强; 目前Zuul使用的默认是Apache的HTTP Client,也可以使用Rest Client,可以设置ribbon.restclient.enabled=true.

注册中心

示例注册中心地址

1
http://admin:pwd123@node1.test.com:8001/eureka/,http://admin:pwd123@node1.test.com:8002/eureka/,http://admin:pwd123@node3.test.com:8003/eureka/
閱讀全文 »

分布式高可用配置中心

發表於 2016-09-03 | 分類於 入门教程 | | 閱讀次數:

在使用spring cloud 构建分布式系统的过程中,为了完成多个服务的配置统一管理,使用了spring cloud config作为配置中心,管理所有微服务的系统配置。在分布式系统中,配置中心是一个独立的服务部件,作用是专门为其他服务提供系统启动所需的配置信息,保证系统正确启动。高可用配置中心的基本思路是将我们的配置服务交给注册中心, 依赖注册中心的多节点服务保证注册的高可用.

注册中心

注册中心地址

1
http://admin:pwd123@node1.test.com:8001/eureka/,http://admin:pwd123@node1.test.com:8002/eureka/,http://admin:pwd123@node3.test.com:8003/eureka/

GIT仓库

地址说明

  • 仓库地址: https://gitee.com/test/spring-eureka
  • 默认分之: master
  • 配置文件: config-property

文件结构

1
2
3
config-property
├── application-develop.properties
└── application-product.properties
閱讀全文 »

Eureka高可用注册中心

發表於 2016-08-02 | 分類於 入门教程 | | 閱讀次數:

在于在我们平时的生产环境中,很难保证单节点的eureka服务能提供百分百不间断的服务,如果eureka无响应了,整个项目应用都会出现问题,因此要保证eureka随时都能提供服务的情况下,最好的方式就是采用eureka的集群模式,也就是搭建eureka的高可用,在eureka的集群模式下,多个eureka server之间可以同步注册服务,因此在一个eureka宕掉的情况下仍然可以提供服务注册和服务发现的能力,从而达到注册中心的高可用.

Eureka注册集群配置

Maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
閱讀全文 »

Eureka服务注册与发现

發表於 2016-08-02 | 分類於 入门教程 | | 閱讀次數:

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring Cloud将它集成在其他子项目spring-cloud-netflix中,以实现spring cloud服务发现功能。

注册中心

注册中心地址

1
http://admin:pwd123@node1.test.com:8001/eureka/,http://admin:pwd123@node1.test.com:8002/eureka/,http://admin:pwd123@node3.test.com:8003/eureka/

服务注册

工程结构

1
2
3
4
5
6
7
8
9
10
11
12
13
eureka-provider
├── pom.xml
├── src
│   └── main
│   ├── java
│   │   └── com
│   │   └── cloud
│   │   └── provider
│   │   ├── Application.java
│   │   └── www
│   │   └── SimpleController.java
│   └── resources
│   └── application.properties
閱讀全文 »

理解Java-虚拟机

發表於 2016-08-01 | 分類於 语言语法 | | 閱讀次數:

JVM介绍

Java虚拟机(Java Virtual Machine)简称JVM,其作用是加载与运行Class文件; JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够一次编译,到处运行的原因.

閱讀全文 »

Zookeeper运维配置

發表於 2016-07-17 | 分類於 运维部署 | | 閱讀次數:

Zookeeper介绍

Zookeeper 是一个基于 Google Chubby 论文实现的一款解决分布式数据一致性问题的开源实现,方便了依赖 Zookeeper 的应用实现 数据发布 / 订阅、负载均衡、服务注册与发现、分布式协调、事件通知、集群管理、Leader 选举、 分布式锁和队列 等功能

Zookeeper下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost cloud]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
[root@localhost cloud]# tar -zxvd zookeeper-3.3.6.tar.gz
[root@localhost cloud]# tree zookeeper-3.3.6/conf/
zookeeper-3.3.6/conf/
├── configuration.xsl
├── log4j.properties
└── zoo_sample.cfg

0 directories, 3 files
[root@localhost cloud]# tree zookeeper-3.3.6/bin/
zookeeper-3.3.6/bin/
├── README.txt
├── zkCleanup.sh
├── zkCli.cmd
├── zkCli.sh
├── zkEnv.cmd
├── zkEnv.sh
├── zkServer.cmd
└── zkServer.sh

0 directories, 8 files
閱讀全文 »

轻量级规则引擎EasyRules

發表於 2016-07-15 | 分類於 应用实践 | | 閱讀次數:

EasyRule概述

Easy-Rules是一款轻量级的规则引擎.

框架特点

  • 轻量级类库和容易上手

  • 基于POJO的开发与注解的编程模型

  • 方便且适用于java的抽象的业务模型规则

  • 支持从简单的规则创建组合规则

官方地址: https://github.com/j-easy/easy-rules

閱讀全文 »
1234…7
蘇若年

蘇若年

64 文章
13 分類
71 標籤
RSS
© 2019 HuntsWork
由 Hexo 強力驅動
|
主題 — NexT.Pisces v5.1.4