zoukankan      html  css  js  c++  java
  • 简谈SpringCloud的入门配置(二)

    入门实例的四步骤:

    1)配置Eureka服务器

    在Spring官网上新建一个SpringCloud项目

    增加Eurake组件

    将其中的pom.xml文件拷贝至eclipse新建的Maven文件中

    由于SpringCloud是基于SpringBoot的,先创建一个启动类Application

    package cn.lch;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer //启动Eurake服务
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

    创建配置文件application.properties

    #1.配置端口
    server.port=5121
    #2.配置eureka主机名,找到eureka所在的机器
    eureka.instance.hostname=localhost
    #3.是否将自身注册为服务 false表示不注册
    eureka.client.register-with-eureka=false
    #4.是否主动发现服务  false表示不发现
    eureka.client.fetch-registry=false
    #5.对外提供的注册入口
    eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

    启动程序,通过url:http://localhost:5121进行访问

    2)创建一个注册服务实例

    在spring官网上新建一个SpringCloud项目

    增加web和cloud discovery组件

    将其中的pom.xml文件拷贝至eclipse新建的Maven文件中

     

    编写程序启动类Application

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

    编写配置文件application.properties

    #指定实例端口
    server.port=8080
    #指定实例名,springcloud是通过实例名称来寻址服务的
    spring.application.name=instanceServer
    #指定Eureka服务端访问路径
    eureka.client.service-url.defaultZone=http://localhost:5121/eureka

    编写一个Controller类

    package cn.lch.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
        
        @RequestMapping("/say")
        public String say() {
            
            return "Hello,SpringCloud";
        }
    
    }

    启动实例(在启动前启动Eurake服务端)

    3)调用服务

    将上述实例1复制一份,并修改项目名

    修改appplication.properties配置文件

    #指定实例端口
    server.port=8081
    #指定实例名,springcloud是通过实例名称来寻址服务的
    spring.application.name=instanceClient
    #指定Eureka服务端访问路径
    eureka.client.service-url.defaultZone=http://localhost:5121/eureka

    修改启动类Application注解

    package cn.lch;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient //标记该项目为一个,该实例是一个发现服务的实例
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

    同时启动Eurake服务端,和实例1和实例2,进行测试

    4)实现客户端与服务端的远程调用

    在instanceServer中发布一个login方法的restful接口给instanceClient调用该接口

    在SpringCloud中远程调用的方法有两种:

      1.Ribbon+RestTemplate,基于restful实现。

      2.Feign(默认启动Ribbon负载均衡)

     本篇讲述的是第一种方式的实现,第二种方式可看第三章的讲解

    修改注册服务,新建User类

    package cn.lch.pojo;
    
    import java.io.Serializable;
    
    public class User implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = 7260598142983180828L;
        
        private Integer id;
        
        private String username;
        
        private String password;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
    }

    修改Controller,增加一个login方法

    package cn.lch.controller;
    
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import cn.lch.pojo.User;
    
    @RestController
    public class UserController {
        /**
         * 用户登录 
         * @return
         */
        @RequestMapping(value="/login",method=RequestMethod.POST)    
        public String login(@RequestBody User user){
            System.out.println("用户名:"+user.getUsername()+",密码:"+user.getPassword());
            return "Ok—intanceServer--8080";
        }
    }

    修改客户端实例

    增加Ribbon依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>

    修改启动类Application,标记该实例是发现服务实例

    package cn.lch;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient//2.用于标识该项目是一个Eureka客户端(发现服务)
    public class Application {
        
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
      //2.创建RestTemplate实例对象,用来远程调用服务
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            
            return new RestTemplate();
        }
    }

    创建UserService类

    package cn.lch.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import cn.lch.pojo.User;
    
    
    @Service
    public class UserService {
    
        @Autowired
        private RestTemplate restTemplate;
        
        public String login(User user){
            String result = restTemplate.postForObject("http://instanceServer/login",user, String.class);
            
            return result;
        }
    }

     依次启动注册中心、服务提供实例、服务发现实例

    远程调用成功

    基于ribbon实现负载均衡

    复制一份instanceserver,并修改maven坐标和配置文件中的端口

    修改Controller中的返回信息

    依次启动Eurake注册中心,instanceServer1,instanceServer2和instanceClient,多次访问登陆接口,查看结果

    第一次调用

    第二次调用

  • 相关阅读:
    requests post一个json数据
    Beautiful Soup常见的解析器
    【bzoj5008】方师傅的房子 计算几何
    【bzoj4842】[Neerc2016]Delight for a Cat 线性规划与网络流
    【bzoj4764】弹飞大爷 LCT
    【bzoj2654】tree 二分+Kruscal
    [NOIP2017]逛公园 最短路+拓扑排序+dp
    【bzoj4165】矩阵 堆+STL-map
    【bzoj3717】[PA2014]Pakowanie 状压dp
    【bzoj1441】Min 扩展裴蜀定理
  • 原文地址:https://www.cnblogs.com/lch-Hao/p/11069916.html
Copyright © 2011-2022 走看看