入门实例的四步骤:
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中远程调用的方法有两种:
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,多次访问登陆接口,查看结果
第一次调用
第二次调用