SpringBoot整合SpringCloud基础实践入门

【1】什么是Spring Cloud

Spring Cloud是一个分布式的整体解决方案。Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。

SpringCloud分布式开发五大常用组件

服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config


测试如下:建立一个空工程,空工程中创建三个Module:eureka-server,consumer-user和provider-ticket。

【1】建立eureka-server注册中心

引入依赖:

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
			<!-- 注意这里表明为服务器端-->
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>


编写配置文件application.yml如下:

server:
  port: 8761
eureka:
  instance:
    hostname: eureka-server  # eureka实例的主机名
  client:
    register-with-eureka: false #不把自己注册到eureka上
    fetch-registry: false #不从eureka上来获取服务的注册信息--不检索服务
    service-url:
      defaultZone: http://localhost:8761/eureka/

项目如下所示:

这里写图片描述


主配置类添加注解@EnableEurekaServer:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

启动注册中心项目,浏览器访问http://localhost:8761/:

这里写图片描述

此时注册中心中还没有任何服务实例!


【2】创建服务提供者并进行注册

引入依赖如下:

<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
			<!--这里表明为客户端-->
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

服务提供者如下:

这里写图片描述


配置文件如下:

server:
  port: 8002
spring:
  application:
    name: provider-ticket


eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/


主程序类如下:

@SpringBootApplication
@EnableEurekaClient//本服务启动后会自动注册进eureka服务中
public class ProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(ProviderApplication.class, args);
	}
}

启动服务提供者,然后查看浏览器注册中心页面:

这里写图片描述

此时注册中心中就有了服务提供者的一个实例!

浏览器测试服务提供者如下:

这里写图片描述


将服务提供者部署多个实例

修改TickerController如下:

	@Value("${server.port}")
    String port;

    // SpringCloud 整合微服务时是按照轻量级的HTTP进行通信
    @GetMapping("/ticket")
    public String getTicker(){
        System.out.println("端口:"+port);
        return ticketService.getTicket();

    }

修改application.yml中的server.port 分别为8001和 8002 ,然后使用Maven打包,在CMD中运行两个jar包。

  • 打的两个jar包
    这里写图片描述

  • 启动8001
    这里写图片描述

  • 启动8002
    这里写图片描述

此时再次查看注册中心:

这里写图片描述


【3】创建服务消费者并注册和发现服务

引入依赖如下:

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

主配置类如下:

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;

@EnableDiscoveryClient//开启发现服务功能
@SpringBootApplication
public class ConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}

	@LoadBalanced//开启负载均衡机制
	@Bean
	public RestTemplate restTemplate(){
		return new RestTemplate();
		// 用来发送http请求
	}
}

这里需要注意手动往容器中注册了RestTemplate,其提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问REST服务的客户端模板工具类。


UserController如下:

@RestController
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/buy")
    public String butTicket(String name){
        String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class);
        return name+"购买了"+s;
    }
}

application.yml如下:

spring:
  application:
    name: consumer-user
server:
  port: 8200

eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

将服务消费者项目启动,查看浏览器注册中心:

这里写图片描述


访问服务消费者的买票方法(http://192.168.2.101:8200/buy?name=张三):

这里写图片描述

当服务消费者接收到该请求时,就会使用RestTemplate访问远程服务提供者注册的服务获取数据然后返回。


发起三次请求,分别查看两个服务提供者的窗口:

这里写图片描述


发起四次请求,分别查看两个服务提供者的窗口:

这里写图片描述

说明确实使用了负载均衡机制(默认为轮询机制)!!!

本篇博文项目地址:https://github.com/JanusJ/SpringBoot

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值