1.SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、负载均衡、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于Springboot的,所以需要开发中对Springboot有一定的了解。

2.服务提供者与消费关系

  就是我我们常说的消费者和生产者

  生产者:提供服务给消费者调用

  消费者:调用生产者提供的服务,从而实现自身的功能模块

3.服务注册中心Eureka

  与duboo类似,duboo我们一般选择zookeper做服务的注册中心,而springcloud是使用Eureka做服务注册中心的。他的作用是就是服务注册与服务发现。以下是比较官方的说明

  

  官方的介绍在这里Eureka wiki。Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客                                   户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
       在我看来,Eureka的吸引力来源于以下几点:

  开源:大家可以对实现一探究竟,甚至修改源码。

  可靠:经过Netflix多年的生产环境考验,使用应该比较靠谱省心

  功能齐全:不但提供了完整的注册发现服务,还有Ribbon等可以配合使用的服务。

  基于Java:对于Java程序员来说,使用起来,心里比较有底。

  spring cloud可以使用Spring Cloud, 与Eureka进行了很好的集成,使用起来非常方便。

4.服务注册

  1.那么我们首先创建一个空的maven项目,就叫springcloud

  

创建完之后,将src目录删除,我们需要的只是这个外层的一个框架。

2.创建模块springboot工程

  

这里我的注册中心的项目名是:eureka-server

3.application.yml配置

server:
port: 8888
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

application.yml

4.springboot的核心配置类

  

 @SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
} }

EurekaServerApplication.java

@EnableEurekaServer:开启EurekaServer的注解支持

5.启动项目,在浏览器上输入http://localhost:8888/当看到以下页面表示成功搭建注册中心

5.生产者producer

  项目创建方式与服务注册中心的创建方式一样

  1.引入pom依赖

  

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter-web

  2.核心配置文件

 eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka/
server:
port: 8763
spring:
application:
name: service-producer

application.yml

  3.生产者类方法

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList;
import java.util.List; @RestController
public class ProducerController {
@RequestMapping("getUser")
public List<String>getUser(){
List<String> lists = new ArrayList<>();
lists.add("zhangsan");
lists.add("lisi");
lists.add("wangwu");
return lists;
}
}

ProducerController

  4.核心配置类

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication
@EnableEurekaClient
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}

ProducerApplication

@EnableEurekaClient:可以理解为将该项目注册到Eureka中

 5.启动项目,刷新http://localhost:8888/可以看到该服务注册到Eurika中

6.消费者consumer

  项目搭建与上诉生产者一样的,没什么变化

  1.pom依赖,与producer使用的一样(我们现在使用的是rest方式传递信息)

  2.application.yml配置文件

 
 eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka/
server:
port: 8764
spring:
application:
name: service-consumer

application.yml(1)

  3.创建service包和controller包

    service包下的类:调用服务

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import java.util.List; @Service
public class ConsumerService {
@Autowired
private RestTemplate restTemplate;
public List<String> getUser(){
List forObject = restTemplate.getForObject("http://service-producer/getUser", List.class);
return forObject;
}
}

ConsumerService

    RestTemplate:该类是使用rest方式传递信息的工具类,可以获取到注册到Eurika上的服务

    controller包下的类:获取信息

    List forObject = restTemplate.getForObject("http://service-producer/getUser", List.class);

      第一个参数是请求生产者的url连接,service-producer:生产者在配置文件中配置的名字;第二个是返回值的类型

 import com.zy.consumer.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
public class ConsumerController {
@Autowired
private ConsumerService service;
@RequestMapping("/getUser")
public List<String> getUser(){
List<String> users = service.getUser();
return users;
}
}

ConsumerController

    与正常mvc的调用顺序是一样的,没有变化

  4.核心配置类

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate; @SpringBootApplication
@EnableEurekaClient
public class ConsumerApplication { public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
} }

ConsumerApplication

  RestTemplate:该类没有做自动配置,需要我们手动注入到spring容器当中去

  @LoadBalanced:表示该项目支持负载均衡

  5.启动服务(启动顺序:注册中心>生产者>消费者)

  使用浏览器请求http://localhost:8764/getUser 可以看到在生产者中创建的集合信息,消费者可以获取到

  师承cmy 0.0

最新文章

  1. 萝卜招聘网 http://www.it9s.com 可以发布免费下载简历求职 ,免费!免费!全部免费!找工作看过来 免费下载简历 !
  2. svn设置外网访问
  3. 原生js基础问题的一些备忘
  4. Google Maps投影在ArcGIS中的设置
  5. C++ Primer 练习7.32(C++ Primer读书笔记)
  6. poj 1821 Fence 单调队列优化dp
  7. oracle nvl()函数在使用中出现的问题
  8. 新CCIE笔记-IP网络基础
  9. 微软依赖注入Unity
  10. RabbitMQ一个简单可靠的方案(.Net Core实现)
  11. 解决ajaxfileupload上传文件在IE浏览器返回data为空问题
  12. JAVA日常之一
  13. Spring中Model、ModelMap及ModelAndView之间的区别+传递参数
  14. zabbix监控java日志文件
  15. 20145315 《Java程序设计》第四周学习总结
  16. (JAVA作业)练习:创建一个类名为Fruit;包含实例变量:水果名称,颜色,价格,上市月份,有无种子 10个实例:苹果,香蕉,芭乐,柚子,李子,杨桃,猕猴桃,哈密瓜,葡萄,榴莲; 实现功能:提示用户输入水果品种编号,输出该水果的全部信息。
  17. nginx配置不当导致的目录遍历下载漏洞-“百度杯”CTF比赛 2017 二月场
  18. 推广Facebook技巧
  19. web安全-点击劫持
  20. view 状态动画

热门文章

  1. 关于 tf.image.crop_and_resize的使用
  2. 计蒜客 密码锁(BFS)
  3. 在线公开课 | 5G时代的视频云服务关键技术与实践
  4. Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore , Condition
  5. ubuntu 编译VLC3.0.0
  6. JavaSE--【JAVA】unicode为12288字符
  7. python机器学习(1:K_means聚类算法)
  8. pandas 学习笔记【持续更新】
  9. 磁力搜索导航,MagnetW将搜索结果格式化统一显示
  10. 扯下Python的super()