spring cloud的入门级别的系统搭建

来源:互联网 发布:sql查询怎么指定别名 编辑:程序博客网 时间:2024/06/05 15:49

spring cloud是一套非常好的微服务架构解决方案,其原理和使用zookeeper及dubbo有些类似,将服务的生产者注册至服务中心,消费者去服务中心订阅该消费者,并进行消费,原理图如下:
这里写图片描述

系统背景:客户调用A系统获取数据,A系统需要将基本数据去B系统计算结果。


注册服务中心的搭建

  1. 导入依赖(spring cloud是基于spring boot的,所以需要导入spring boot的依赖):
<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.4.RELEASE</version></parent><!-- 导入Spring Cloud的依赖管理 --><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>Dalston.SR3</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><dependencies>    <!-- 导入Eureka服务的依赖 -->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-eureka-server</artifactId>    </dependency>    <!-- 注册服务中心设置登录权限 -->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-security</artifactId>    </dependency></dependencies><build>    <finalName>${project.artifactId}</finalName>    <plugins>        <!-- 资源文件拷贝插件 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-resources-plugin</artifactId>            <configuration>                <encoding>UTF-8</encoding>            </configuration>        </plugin>        <!-- java编译插件 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <configuration>                <source>1.8</source>                <target>1.8</target>                <encoding>UTF-8</encoding>            </configuration>        </plugin>    </plugins></build>

2.配置文件编写(application.yml):

server:  port: 6868 #服务端口eureka:  client:    registerWithEureka: false #是否将自己注册到Eureka服务中,本身就是所有无需注册    fetchRegistry: false #是否从Eureka中获取注册信息    serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址      defaultZone: http://cloud:cloud@127.0.0.1:${server.port}/eureka/security:   basic:      enable: true #开启基于HTTP basic的认证  user: #配置用户的账号信息    name: cloud    password: cloud

3.启动类:

@EnableEurekaServer //申明这是一个Eureka服务@SpringBootApplicationpublic class EurekaServer {    public static void main(String[] args) {        SpringApplication.run(EurekaServer.class, args);    }}

启动该服务,登录127.0.0.1:6868,进入注册服务中心控制台:
这里写图片描述
到此,注册中心就搭建完成,但是还没有服务注册。


计算系统的搭建

1.导入依赖

<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.4.RELEASE</version></parent><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>Dalston.SR3</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-eureka-server</artifactId>    </dependency></dependencies><build>    <finalName>${project.artifactId}</finalName>    <plugins>        <!-- 资源文件拷贝插件 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-resources-plugin</artifactId>            <configuration>                <encoding>UTF-8</encoding>            </configuration>        </plugin>        <!-- java编译插件 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <configuration>                <source>1.8</source>                <target>1.8</target>                <encoding>UTF-8</encoding>            </configuration>        </plugin>    </plugins></build>

2.配置文件的编写

server:  port: 8082spring:   application:      name: com-spring-caclulate #指定服务名eureka:  client:    registerWithEureka: true #是否将自己注册到Eureka服务中,默认为true    fetchRegistry: true #是否从Eureka中获取注册信息,默认为true    serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址      defaultZone: http://cloud:cloud@127.0.0.1:6868/eureka/  instance:     prefer-ip-address: true #将自己的ip地址注册到Eureka服务中

3.启动类

@EnableDiscoveryClient//申请成为注册服务中心的客户端@SpringBootApplication //申明这是一个Spring Boot项目public class CacluApplication {    public static void main(String[] args) {        SpringApplication.run(ItemApplication.class, args);    }}

4.功能代码(系统中的业务代码)

@RestControllerpublic class CacluController {    /**     * 对外提供接口服务,计算数据     *      * @param num     * @return     */    //@RequestMapping(method = RequestMethod.GET)    @GetMapping(value = "caclu/{num}")    public Integer caclulate(@PathVariable("num") Integer num) {        return num*10;    }}

启动商品系统,再次登录注册服务中心,我们发现该服务已经注册了。
这里写图片描述


消费系统的搭建

1.导入依赖

<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.4.RELEASE</version></parent><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>Dalston.SR3</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>com.squareup.okhttp3</groupId>        <artifactId>okhttp</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-eureka-server</artifactId>        <exclusions>            <exclusion>                <groupId>com.fasterxml.jackson.dataformat</groupId>                <artifactId>jackson-dataformat-xml</artifactId>            </exclusion>        </exclusions>    </dependency></dependencies><build>    <finalName>${project.artifactId}</finalName>    <plugins>        <!-- 资源文件拷贝插件 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-resources-plugin</artifactId>            <configuration>                <encoding>UTF-8</encoding>            </configuration>        </plugin>        <!-- java编译插件 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <configuration>                <source>1.8</source>                <target>1.8</target>                <encoding>UTF-8</encoding>            </configuration>        </plugin>    </plugins></build>

2.配置文件

server:  port: 8083eureka:  client:    registerWithEureka: false #是否将自己注册到Eureka服务中,默认为true    fetchRegistry: true #是否从Eureka中获取注册信息,默认为true    serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址      defaultZone: http://cloud:cloud@127.0.0.1:6868/eureka/

3.启动类

@EnableDiscoveryClient@SpringBootApplicationpublic class OrderApplication {    @Bean // 向Spring容器中定义RestTemplate对象    public RestTemplate restTemplate(){        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());    }    public static void main(String[] args) {        SpringApplication.run(OrderApplication.class, args);    }}

4.业务代码

@RestControllerpublic class OrderController {    @Autowired    private RestTemplate restTemplate;    @Autowired    private DiscoveryClient discoveryClient;    @GetMapping(value = "query/result")    public Integer caclulate() {        String serviceId = "com-spring-caclulate";        List<ServiceInstance> instances = this.discoveryClient.getInstances(serviceId);        if(instances.isEmpty()){            return null;        }        ServiceInstance serviceInstance = instances.get(0);        String url = serviceInstance.getHost() + ":" + serviceInstance.getPort();        return this.restTemplate.getForObject("http://" + url + "/caclu/1", Integer.class);    }}

启动服务,并访问接口,我们调用时num为1,计算结果为10。

阅读全文
0 0
原创粉丝点击