目录
SpringCloud 套餐介绍
实操
1.创建注册中心 demo-registy (Eureka-server框架)
2.创建第一个服务提供者 demo-provider
3.创建第二个服务提供者 demo-provider2
4.创建服务消费者 demo-consumer
5. 调用远程服务
5.1 方法一:使用 RestTemplate 工具类调用
5.2 方式二:使用服务消费 Fegin 框架
SpringCloud 套餐介绍
套餐1:netfilx(这是一家公司的名称,网飞、奈飞):springcloud netfilx 这就是netfilx这家公司提供的一套微服务解决方案,这套解决方案有很多技术,技术1 注册中心 Eurake,技术2负载均衡Ribbon 等等
套餐2:阿里巴巴的 springcloud alibaba
实操
1.创建注册中心 demo-registy (Eureka-server框架)
1.1 导入依赖
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? ?</dependency>
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
? ? ? ?</dependency>
1.2 配置注册中心 application.properties
# 应用名称
spring.application.name=demo-registry
# 应用服务 WEB 访问端口,官网默认端口8761,随意改
server.port=8761
?
# 是否注册到注册中心,因为此项目本身就是注册中心,所以不用注册到注册中心,所以配置为false,这里默认配置是 ture 的
eureka.client.register-with-eureka=false
?
# 是否允许从注册中心拉取服务,但是此项目本身就是注册中心,所以配置为false
eureka.client.fetch-registry=false
?
# 配置的注册中心的注册地址,本身就是注册中心,下面这段可以不写,因为源码里就有这个默认值
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
1.3 在启动类上加注解 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer ?//允许当前项目以注册中心的身份启动
public class DemoRegistryApplication {
?
? ?public static void main(String[] args) {
? ? ? ?SpringApplication.run(DemoRegistryApplication.class, args);
? }
?
}
2.创建第一个服务提供者 demo-provider
2.1 导入依赖
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? ?</dependency>
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
? ? ? ?</dependency>
2.2 配置注册到服务中心 application.properties
# 应用名称
spring.application.name=demo-provider
# 应用服务 WEB 访问端口
server.port=8081
?
# 因为此项目是服务提供者,需要把服务注册到注册中心,所以配置为true,这里默认是true的
eureka.client.register-with-eureka=true
?
# 允许从注册中心拉去服务,此项目是服务提供者,所以配置true,这里默认是true的
eureka.client.fetch-registry=true
?
# 配置的注册中心的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
2.3 在启动类上加注解 @EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient ?//服务提供者身份启动
public class DemoProviderApplication {
?
? ?public static void main(String[] args) {
? ? ? ?SpringApplication.run(DemoProviderApplication.class, args);
? }
?
}
2.4 编写一个接口
@RestController
@RequestMapping("/provider")
public class ProviderController {
?
? ?@RequestMapping("/demo")
? ?public String demo(){
? ? ? ?return "服务提供者1";
? }
?
}
3.创建第二个服务提供者 demo-provider2
3.1 再建一个项目 demo-provider2,服务名还是叫 demo-provider
? ? ? ? ? ? ? ? ? ? ? ??
3.2 配置 application.properties
? ? ? ? ? ??
3.3 编写 controller,除了内容不一样,接口名什么的都跟 demo-provider 一样
? ? ? ? ? ?
? ? ? ? ? ?
4.创建服务消费者 demo-consumer
4.1 导入依赖
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? ?</dependency>
?
? ? ? ?<!-- 发现服务提供者需要的包 -->
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
? ? ? ?</dependency>
?
? ? ? ?<!-- 注册到注册中心需要的包 -->
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
? ? ? ?</dependency>
?
4.2 配置注册到服务中心 application.properties
# 应用名称
spring.application.name=demo-consumer
# 应用服务 WEB 访问端口
server.port=8082
?
# 因为此项目是服务消费者,需要注册到注册中心,配置为 true,这里默认是 true
eureka.client.register-with-eureka=true
?
# 允许从注册中心拉去信息,此项目是服务消费者,所以配置true,这里默认是 true
eureka.client.fetch-registry=true
?
# 配置的注册中心的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
4.3在启动类上加注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient ? //服务消费者身份启动
public class DemoConsumerApplication {
?
? ?public static void main(String[] args) {
? ? ? ?SpringApplication.run(DemoConsumerApplication.class, args);
? }
?
}
4.4编写一个接口,远程调用服务消费者提供的服务
5. 调用远程服务
5.1 方法一:使用 RestTemplate 工具类调用
Ribbon与Nginx的负载均衡的区别:
5.1.1 编写 RestTemplateConfig
@Configuration
public class RestTemplateConfig {
?
? ?@Bean //将当前方法创建的 Bean 交给 spring 管理
? ?@LoadBalanced //支持负载均衡
? ?public RestTemplate restTemplate(){
? ? ? ?RestTemplate template = new RestTemplate();
? ? ? ?return template;
? }
?
}
5.1.2 编写 controller
@RestController
@RequestMapping("/consunmer")
public class Demo {
?
? ?@Autowired
? ?private RestTemplate template;
?
? ?@RequestMapping("/getData")
? ?public String test(){
//参数1:请求地址
? ? ? ?//参数2:响应返回值
? ? ? ?//参数3:请求参数
? ? // 服务提供者那边接口没有参数,所有这里也不用写
? ? ? ?String object = template.getForObject("http://demo-provider/provider/demo", String.class);
?
? ? ? ?return object;
? }
?
}
5.2 方式二:使用服务消费 Fegin 框架
5.2.1 导入依赖
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-feign</artifactId>
? ? ? ? ? ?<version>1.4.7.RELEASE</version>
? ? ? ?</dependency>
5.2.2 配置启动类 @EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient ? //服务消费者身份启动
@EnableFeignClients ? ? //开启 Feign 进行服务调用
public class DemoConsumerApplication {
?
? ?public static void main(String[] args) {
? ? ? ?SpringApplication.run(DemoConsumerApplication.class, args);
? }
?
}
5.2.3 使用 Feign,需要写一个接口 PrviderServier
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
?
@FeignClient("demo-provider") ?//参数配置是服务提供者的服务名称
@RequestMapping("/provider")
public interface ProviderService {
?
? ?@RequestMapping("/demo")
? ?public String demo();
?
}
5.2.4 编写 controller
@RestController
@RequestMapping("/consumer")
public class Demo {
?
? ?// 方法一:使用 RestTemplate 工具类调用
? ?@Autowired
? ?private RestTemplate template;
?
? ?// 方法二:使用服务消费 Fegin 框架
? ?@Autowired
? ?private ProviderService providerService;
?
? ?// 方法一
? ?@RequestMapping("/getData")
? ?public String test(){
? ? ? ?//参数1:请求地址
? ? ? ?//参数2:响应返回值
? ? ? ?//参数3:请求参数
? ? ? ?String object = template.getForObject("http://demo-provider/demo", String.class);
? ? ? ?System.out.println("调用:"+ object);
? ? ? ?return object;
? }
?
? ?// 方法二:使用服务消费 Fegin 框架
? ?@RequestMapping("/getData2")
? ?public String test2(){
? ? ? ?String demo = providerService.demo();
? ? ? ?System.out.println("调用:" + demo);
? ? ? ?return demo;
? }
?
}
|