springcloud学习(一)

之前用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
@SpringBootApplication
public class DemoApplication {

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

application.properties,配置

server.port=1111
eureka.instance.hostname = 127.0.0.1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry = false
eureka.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
@SpringBootApplication
public class DemoApplication {

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

 
 
 
 
@RestController

public class HelloController {

@Autowired
private 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-service
eureka.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
@SpringBootApplication
public class RibbonConsumerApplication {

   @Bean
   @LoadBalanced
   RestTemplate restTemplate () {
      return new RestTemplate();
   }

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

 
 
ConsumerController.class
 
 
 
 
 
 
@RestController
public 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-consumer
server.port=9000
eureka.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成功

猜你喜欢

转载自blog.csdn.net/cardinalzbk/article/details/78852278
今日推荐