简谈SpringCloud的入门配置

Posted lch-hao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简谈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,多次访问登陆接口,查看结果

技术图片

第一次调用

技术图片

第二次调用

技术图片

 

以上是关于简谈SpringCloud的入门配置的主要内容,如果未能解决你的问题,请参考以下文章

简谈SpringCloud学习

SpringCloud

Spring cloud应该如何入门,需要学习哪些基础才可以快速掌握?

springcloud:配置中心和消息总线(配置中心终结版)

springcloud:配置中心和消息总线(配置中心终结版)

SpringCloud之Ribbon进行服务调用