SpringCloud--register、provider

来源:互联网 发布:asp控件怎么隐藏js 编辑:程序博客网 时间:2024/05/21 09:24

本篇文章是自己针对SpringCloud学的的总结。主要总结SpringCloud的服务注册、发现和消费。

一、服务的注册

在使用SpringCloud开发应用中,我们需要将所有的功能模块都注册到一个相同的容器,而这个容器就是我们下面看到的register。下面详解创建服务注册器的过程。

(1)创建一个SpringBoot工程。

由于SpringCloud是基于SpringBoot的分布式框架,所以我们需要创建SpringBoot工程。工程结构如下:


(2)需要引入的Maven依赖

<?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>register</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>liutao-register</name>    <description>the demo of springCloud register</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>        <relativePath/>    </parent>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka-server</artifactId>        </dependency>    </dependencies>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Brixton.RELEASE</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>
(3)配置文件配置项

server.port=8000eureka.client.register-with-eureka=falseeureka.client.fetch-registry=falseeureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
上面配置了register的端口号和注册地址。

(4)程序运行主类

package com.liutao.application;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/** * 用于配置和启动引导 */@EnableEurekaServer@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
上面的@EnableEurekaServer注解表示启动一个服务注册中心。

(5)查看注册结果

现在我们就可以直接运行程序,然后在浏览器中链接到http://localhost:8000地址就可以看见服务注册中心的注册情况了,如下:

从上图我们可以看见目前注册中心没有任何服务注册进去。

下面我们就开始了解服务是如何注册到服务注册中心的。

二、服务提供者

在通常的SpringCloud程序开发中,我们需要将项目按照功能创建不同的模块,而这些模块业务逻辑的主要实现就是在服务提供者中,一个项目通常有很多的服务提供者,这些服务提供者都需要注册到register中才能被消费。

(1)创建一个简单的SpringBoot工程

工程结构如下:


注意:上面的工程是自己主要想在项目中使用而搭建的,包含了以下部分:

1)集成Swagger。

2)集成logBack日志管理。

3)集成了Jpa和Mybatis。

4)集成了单元测试。

5)本工程的数据连接池使用的是durid。

(2)需要添加的maven依赖

<?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>Springcloud - provider</name>    <description>the demo of springCloud</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <version.spring>3.2.9.RELEASE</version.spring>        <version.jackson>2.4.4</version.jackson>        <java.version>1.8</java.version>    </properties>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>            <version>1.3.0.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-aop</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-jpa</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-freemarker</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.2.0</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web-services</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.restdocs</groupId>            <artifactId>spring-restdocs-mockmvc</artifactId>            <scope>test</scope>        </dependency>        <!--start数据库连接-->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-jpa</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.0.25</version>        </dependency>        <!--end数据库链接-->        <!--start Swagger-->        <dependency>            <groupId>com.mangofactory</groupId>            <artifactId>swagger-springmvc</artifactId>            <version>0.9.5</version>        </dependency>        <dependency>            <groupId>io.springfox</groupId>            <artifactId>springfox-swagger2</artifactId>            <version>2.6.1</version>        </dependency>        <dependency>            <groupId>io.springfox</groupId>            <artifactId>springfox-swagger-ui</artifactId>            <version>2.6.1</version>        </dependency>        <!--end Swagger-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-ribbon</artifactId>            <version>1.3.0.RELEASE</version>        </dependency>        <!--添加单元测试-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-log4j</artifactId>            <version>1.3.8.RELEASE</version>        </dependency>        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper</artifactId>            <version>4.2.0</version>        </dependency>    </dependencies></project>
注意上面的maven依赖并不是在所有情况下都需要,某些是根据我自己的需要添加的。

(3)配置文件针对SpringCloud的配置

#the common of SpringCloudspring.application.name=liutao-providerserver.port=8001eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
上面的配置,分别配置了服务名称,用于 注册到注册中心 方便后面消费者的使用,服务端口,服务注册中心地址。

(4)程序主类

package com.liutao.application;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.context.annotation.ComponentScan;/** * 用于配置和启动引导 */@EnableDiscoveryClient@SpringBootApplication@ComponentScan(basePackages={"com.liutao"})public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
注意,上面的@EnableDiscoveryClient主要是w为了服务注册中心发现服务。

(5)程序测试Controller

package com.liutao.controller;import com.liutao.entity.User;import com.liutao.service.UserService;import com.wordnik.swagger.annotations.Api;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;/** * Created by liutao on 2015/8/27. */@RestController@Api(value = "test")@RequestMapping("/liutao")public class UserController {    private Logger logger = Logger.getLogger(UserController.class);    @Autowired    private UserService userServiceImpl;    @GetMapping(value = "/userInfo")    @ResponseBody    public User getUserInfo(@RequestParam("username") String username) {        logger.info("username:"+username);        User user = userServiceImpl.getUserInfo(username);        if(user!=null){            logger.info(user);        }        return user;    }}

(6)测试

到目前位置我们可以启动程序,然后再次访问上面的服务注册中心,就可以看见服务被注册到了服务注册中心,如下图:


至此,我们已经完成了服务的注册,针对服务的消费在下一篇中讲解。

详细代码请参考gitHub地址:SpringCloud--register、provider


原创粉丝点击