springcloud学习(一)

来源:互联网 发布:java 短网址 编辑:程序博客网 时间:2024/06/02 02:17

之前用dubbo,新项目需要用到spring cloud,学习一下,在这里简单的做个记录。

其实不论是doubbo,doubbox和spring cloud,都是对服务的一个治理方案,用哪个都可以。只是根据项目的具体情况来选择。

spring cloud包含一大推子项目。

Spring Cloud Config:  配置管理工具, 支持使用Git存储 配置内容, 可以使用它实现应用配置的外部化存储, 并支持客户端配置信息刷新、 加密/ 解密配置内容 等。
 Spring Cloud Netflix: 核心 组件,对多个Netflix OSS开源套件进行整合。
 Eureka:  服务治理组件, 包含服务注册中心、 服务注册与发现机制的实现。
 Hystrix: 容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
 Ribbon: 客户端负载均衡的服务调用组件。
 Spring Cloud 微服务实战
 Feign: 基于Ribbon 和 Hystrix 的声明式服务调用组件。
 Zuul: 网关组件, 提供智能路由、 访问过滤等功能。
 Archaius: 外部化配置组件。
 Spring Cloud Bus: 事件、 消息总线, 用于传播集群中的状态变化或事件, 以触发后续的处理, 比如用来动态刷新配置等。
 Spring Cloud Cluster: 针对 ZooKeeper、 Redis、 Hazelcast、 Consul 的选举算法和通用状态模式的实现。
 Spring Cloud Cloudfoundry: 与 Pivotal Cloudfoundry的整合支持。
 Spring Cloud Consul: 服务发现与配置管理工具。
 Spring Cloud Stream: 通过 Redis、 Rabbit 或者 Kafka 实现的消费微服务, 可以通过简单的声明式模型来发送和接收消息。
 Spring Cloud A WS: 用千简化整合 Amazon Web Service 的组件。
 Spring Cloud Security: 安全工具包, 提供在 Zuul 代理中对 0Auth2 客户端请求的中继器。
 Spring Cloud Sleuth: Spring Cloud 应用的分布式跟踪实现, 可以完美整合 Zip虹n。
 Spring Cloud ZooKeeper: 基于 ZooKeeper 的服务发现与配置管理组件。
 Spring Cloud Starters: Spring Cloud 的基础组件, 它是基于Spring Boot 风格项目的基础依赖模块。
 Spring Cloud CLI: 用于在 Groovy 中快速创建 Spring Cloud 应用的Spring Boot CLI插件。


对于服务的治理,最基本的就是服务注册,服务提供者,服务消费者。

 服务注册中心: Eureka提供的服务端, 提供服务注册与发现的功能。
 服务提供者:提供服务的应用, 可以是 Spring Boot 应用, 也可以是其他技术平台且遵循 Eureka通信机制的应用。它将自己提供的服务注册到 Eureka, 以供其他应用发现
 服务消费者:消费者应用从服务注册中心获取服务列表, 从而使消费者可以知道去何处调用其所需要的服务,使用Ribbon 来实现服务消费


后面上几个配置和代码:

1、eurekaServer,用户实现服务注册

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>com.eurekaServer</groupId>   <artifactId>demo</artifactId>   <version>0.0.1-SNAPSHOT</version>   <packaging>jar</packaging>   <name>demo</name>   <description>Demo project for Spring Boot</description>   <parent>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-parent</artifactId>      <version>1.5.9.RELEASE</version>      <relativePath/> <!-- lookup parent from repository -->   </parent>   <properties>      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>      <java.version>1.8</java.version>      <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>   </properties>   <dependencies>      <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-eureka-server</artifactId>      </dependency>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-test</artifactId>         <scope>test</scope>      </dependency>   </dependencies>   <dependencyManagement>      <dependencies>         <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>${spring-cloud.version}</version>            <type>pom</type>            <scope>import</scope>         </dependency>      </dependencies>   </dependencyManagement>   <build>      <plugins>         <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>      </plugins>   </build></project>

DemoApplication.class

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

application.properties,配置

server.port=1111eureka.instance.hostname = 127.0.0.1eureka.client.register-with-eureka=falseeureka.client.fetch-registry = falseeureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

2、服务生产者


pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>com.example</groupId>   <artifactId>demo</artifactId>   <version>0.0.1-SNAPSHOT</version>   <packaging>jar</packaging>   <name>demo</name>   <description>Demo project for Spring Boot</description>   <parent>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-parent</artifactId>      <version>1.5.9.RELEASE</version>      <relativePath/> <!-- lookup parent from repository -->   </parent>   <properties>      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>      <java.version>1.8</java.version>   </properties>   <dependencies>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter</artifactId>      </dependency>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>      </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>      <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-eureka</artifactId>         <version>1.4.0.RELEASE</version>      </dependency><!--      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-jdbc</artifactId>      </dependency>-->      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-test</artifactId>         <scope>test</scope>      </dependency>   </dependencies>   <build>      <plugins>         <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>      </plugins>   </build>
</project>
 DemoApplication.class  服务入口
@EnableDiscoveryClient@SpringBootApplicationpublic class DemoApplication {   public static void main(String[] args) {      SpringApplication.run(DemoApplication.class, args);   }}
HelloController.class

@RestControllerpublic class HelloController {@Autowiredprivate DiscoveryClient client;    private final Logger logger  = Logger.getLogger("HelloController.class");    @RequestMapping("/hello")    public String index() {        ServiceInstance instance = client.getLocalServiceInstance();        logger.info("/hello, host:" + instance.getHost()+ instance.getServiceId());        return "Hello world!";    }}

application.properties 配置文件
spring.application.name = hello-serviceeureka.client.serviceUrl.defaultZone =http://127.0.0.1:1111/eureka/

3、服务消费者:
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>com.ribbon-consumer</groupId>   <artifactId>ribbon-consumer</artifactId>   <version>0.0.1-SNAPSHOT</version>   <packaging>jar</packaging>   <name>ribbon-consumer</name>   <description>Demo project for Spring Boot</description>   <parent>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-parent</artifactId>      <version>1.5.9.RELEASE</version>      <relativePath/> <!-- lookup parent from repository -->   </parent>   <properties>      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>      <java.version>1.8</java.version>   </properties>   <dependencies>      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>         </dependency>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>      </dependency>      <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-eureka</artifactId>         <version>1.4.0.RELEASE</version>      </dependency>      <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-ribbon</artifactId>         <version>1.4.0.RELEASE</version>      </dependency>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-test</artifactId>         <scope>test</scope>      </dependency>   </dependencies>   <build>      <plugins>         <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>      </plugins>   </build></project>

RibbonConsumerApplication.class  服务入口
@EnableDiscoveryClient@SpringBootApplicationpublic class RibbonConsumerApplication {   @Bean   @LoadBalanced   RestTemplate restTemplate () {      return new RestTemplate();   }   public static void main(String[] args) {      SpringApplication.run(RibbonConsumerApplication.class, args);   }}

ConsumerController.class
@RestControllerpublic class ConsumerController {    @Autowired    RestTemplate restTemplate;@RequestMapping(value = "/ribbon-consumer",method= RequestMethod.GET)    public String helloConsumer () {        return restTemplate.getForEntity("http://HELLO-SERVICE/hello",String.class).getBody();    }}


application.properties 配置文件
spring.application.name = ribbon-consumerserver.port=9000eureka.client.serviceUrl.defaultZone = http://127.0.0.1:1111/eureka/

eureka项目启动后,会看到两个服务,一个hello-service,服务提供者,一个是ribbon-consumer服务提供者,
访问http://127.0.0.1:9000/ribbon-consumer后,会打出hello world,说明consumer调用hello-service成功

原创粉丝点击