MyException - 我的异常网
当前位置:我的异常网» 云计算 » 2.搭建SpringCloud(Finchley.M8版本)服务集群(含

2.搭建SpringCloud(Finchley.M8版本)服务集群(含源码)

www.MyException.Cn  网友分享于:2018-03-12  浏览:0次
二.搭建SpringCloud(Finchley.M8版本)服务集群(含源码)
一、目标
一个高可用的注册中心+ 一个高可用的服务提供者+一个使用负载均衡访问的客户端服务

二、步骤
  以下在<spring-cloud.version>Finchley.M8</spring-cloud.version> 版本下建立
1.建立一个高可用的注册中心
POM主要依赖spring-cloud-starter-netflix-eureka-server:
	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

使得项目工程具备EurekaServer注册中心功能,只需引用:
  @EnableEurekaServer
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class SpringcloudApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringcloudApplication.class, args);
	}
}

配置application文件,使得两个注册中心相互注册对方。
  1).创建application-peer1.properties
 
 server.port = 11111
spring.application.name=eureka-service
eureka.instance.hostname =  peer1
eureka.client.register-with-eureka = true
eureka.client.fetch-registry = true
eureka.client.serviceUrl.defaultZone = http://peer2:11112/eureka/

2).创建application-peer2.properties
 server.port = 11112
spring.application.name=eureka-service
eureka.instance.hostname =  peer2
eureka.client.register-with-eureka = true
eureka.client.fetch-registry = true
eureka.client.serviceUrl.defaultZone = http://peer1:11111/eureka/

3).在C:\Windows\System32\drivers\etc\hosts下配置
127.0.0.1 peer1
127.0.0.1 peer2

4).分别启动两个注册服务中心
  java -jar springcloud-0.0.1-SNAPSHOT.jar --spring.profiles.active = peer1
  java -jar springcloud-0.0.1-SNAPSHOT.jar --spring.profiles.active = peer2
注册中心代码地址:https://github.com/dick1305/springcloud.git
2.一个高可用的服务提供者
1)POM文件
 
	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

 
2)使项目具备服务提供者功能,添加@EnableDiscoveryClient
  
@EnableDiscoveryClient
@SpringBootApplication
public class SpringServer1Application {

	public static void main(String[] args) {
		SpringApplication.run(SpringServer1Application.class, args);
	}
}

3)发布helloworld服务
@RestController
public class HelloWorldContrller {
	@Autowired
   private DiscoveryClient client;
	@RequestMapping(value="/hellWorld",method = RequestMethod.GET)
	public String hellWorld(String content) {
		List<ServiceInstance> instanceLst=client.getInstances("eureka-service");
		System.out.println("=====================================");
		for( ServiceInstance s:instanceLst) {
			System.out.println(s.getPort()+":"+s.getHost());
		}
		return "helloWold " +content;
	}
}

4)配置application.properties
   自动关联注册两个服务中心,防止单点故障
server.port = 22223
spring.application.name=eureka-helloWorld
eureka.client.serviceUrl.defaultZone = http://peer1:11111/eureka,http://peer1:11112/eureka

5)启动服务
  java -jar spring-server1-0.0.1-SNAPSHOT.jar --server.port = 22223
  java -jar spring-server1-0.0.1-SNAPSHOT.jar --server.port = 22222
代码地址:https://github.com/dick1305/eurekaServerExamble.git
3.构建一个使用ribbon负载均衡访问的客户端服务
1)POM
	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

2)使用@EnableDiscoveryClient 来注册发现服务,使用@LoadBalanced 来注解RestTemplate 提供访问服务提供者
 
@EnableDiscoveryClient
@SpringBootApplication
public class SpringRibbonConsumerApplication {
	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}

	public static void main(String[] args) {
		SpringApplication.run(SpringRibbonConsumerApplication.class, args);
	}
}

服务消费者访问服务提供者方法
 
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/consumerHellWorld",method = RequestMethod.GET)
public String consumerHellWorld(String content) {
	return restTemplate.getForEntity("http://eureka-helloWorld/hellWorld?content="+content, String.class).getBody();
}
}

4)application.properties
spring.application.name = ribbon-consumer
server.port = 33333
eureka.client.serviceUrl.defaultZone = http://peer1:11111/eureka,http://peer1:11112/eureka

5)源代码:https://github.com/dick1305/spring-ribbon-consumer-examble.git
5.查看服务界面

6.访问http://localhost:33333/consumerHellWorld?content=3333 查看消费者请求后的结果。

7.其他

  服务续约:在组册完服务后,服务提供者会维护一个心跳来告诉Eureka Server 用例还存活。可以通过续约配置:
  eureka.instance.lease-renewal-interval-in-seconds = 30 //30秒为服务续约时间
  eureka.instance.lease-expiration-duraiton-in-seconds = 90 //定义服务失效时间90秒
服务消费者:在服务消费者会维护一份只读的服务清单来返回给客户端,通过Ribbon(轮询)方式调用。获取服务的参数:eureka.client.fetch-registry = true (默认为true)
  缓存清单更新时间:eureka.client.registry-fecth-interval-seconds =30

文章评论

Java程序员必看电影
Java程序员必看电影
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
那些争议最大的编程观点
那些争议最大的编程观点
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员都该阅读的书
程序员都该阅读的书
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
中美印日四国程序员比较
中美印日四国程序员比较
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
10个调试和排错的小建议
10个调试和排错的小建议
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
代码女神横空出世
代码女神横空出世
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
旅行,写作,编程
旅行,写作,编程
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
老程序员的下场
老程序员的下场
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
如何成为一名黑客
如何成为一名黑客
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
一个程序员的时间管理
一个程序员的时间管理
程序员必看的十大电影
程序员必看的十大电影
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
我是如何打败拖延症的
我是如何打败拖延症的
程序员和编码员之间的区别
程序员和编码员之间的区别
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
鲜为人知的编程真相
鲜为人知的编程真相
编程语言是女人
编程语言是女人
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
每天工作4小时的程序员
每天工作4小时的程序员
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有