适合初学者在Idea上学习搭建的SpringCloud框架以及各个组件的步骤 【建议收藏!!!】

适合初学者在 idea 上学习搭建的SpringCloud框架以及各个组件的步骤

配置一个springcloud项目如下:

先创建一个什么都不要选的maven项目,接着就是在maven项目里面依次创建各个模块项目,具体请看以下介绍.

模块例图:
在这里插入图片描述
1 .首先要创建一个spring的项目,例如名叫springcloud-eureka的项目,其实也就是注册中心。
在创建项目的时候记得要勾选Spring Cloud Discovery 中的 Eureka Server 。
然后将 application.properties 中的的后缀改成 .yml ,之后就是填写 application.yml 中的配置文件

配置如下:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defalutZone: http://${eureka.instance.hostname}:${server.port}/eureka

最后呢,就是在 SpringcloudEurekaApplication 也就是启动类上加上 @EnableEurekaServer这个注解,在浏览器上成功访问 http://localhost:8761/ 这个路径就说明配置成功了.

2 .创建一个生产者的spring项目,例如名叫springcloud-provider的项目。

  • 2.1
    在创建项目的时候要勾选三个jar包 :
    ①:Web中的Spring Web Starter
    ②:Spring Cloud Discovery 中的Eureka Discovery Client
    ③:Spring Cloud Config 中的 Config Client
  • 2.2
    将 application.properties 中的的后缀改成 .yml ,之后就是填写 application.yml 中的配置文件.
    配置如下:
server:
  port: 8762

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

spring:
  application:
    name: springcloud-provider
  • 2.3
    在启动类上加@EnableEurekaClient //启用eureka客户端
    这样一个生产者也就配置好啦!也可以写一个简单的方法测试一下,看能否跑通.首先创建一个controller层,然后 再写一个测试类( TestController ),在类上加一个@RestController ( 此注解为 @ResponseBody 与 @Controller 的合体注解 ) , 接下来就是写方法 ,如下
 //java代码获取配置文件中参数
       @Value("${server.port}")
       String port;

       @Value("${spring.application.name}")
       String applicationName;

@RequestMapping("postm/{name}")
public String postMethod(@PathVariable("name") String name){
    System.out.println("你好"+ name + ", 你请求的实例:" + applicationName + ", 请求的端口号:" + port);
    String result = "你好"+ name + ", 你请求的实例:" + applicationName + ", 请求的端口号:" + port;
    return result;
}

如图:
在这里插入图片描述
最后就是在浏览器上访问此方法,访问成功说明就配置好啦.

3 . 创建一个feign的spirng项目,也就相当于一个消费者的项目.例如名叫springcloud-feign。

  • 3.1
    在创建项目的时候要勾选三个jar包 :
    ①: Web中的Spring Web Starter
    ②:Spring Cloud Discovery 中的Eureka Discovery Client
    ③:Spring Cloud Routing 中的 OpenFeign
  • 3.2
    将 application.properties 中的的后缀改成 .yml ,之后就是填写 application.yml 中的配置文件.
    配置如下:
server:
  port: 8763

spring:
  application:
    name: springcloud-feign

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  • 3.3
    在启动类上加俩个注解:
    @EnableEurekaClient
    @EnableFeignClients

  • 3.4
    创建一个controller类 和 service 接口并加上注解 @FeignClient(“生产者实例名”) //指定生产者实例名

    Controller 层例如 :
    在这里插入图片描述
    Service 接口如下 :
    @FeignClient(“生产者实例名”) //指定生产者实例名
    注意:
    接口中的方法和生产者controller中的方法保持一致 ,
    包括请求的方式,传入的参数,方法定义和返回参数 !!!

如图:
在这里插入图片描述
生产者controller里的方法如下:

在这里插入图片描述
最后在浏览器上访问成功,说明feign就配置成功啦.

4 . 创建一个ribbon的spirng项目,也就相当于一个消费者的项目.例如名叫springcloud-ribbon。

  • 4.1
    在创建项目的时候要勾选三个jar包 :
    ①: Web中的Spring Web Starter
    ②: Spring Cloud Discovery 中的Eureka Discovery Client
    ③: Spring Cloud Routing 中的 Ribbon
  • 4.2
    将 application.properties 中的的后缀改成 .yml ,之后就是填写 application.yml 中的配置文件.
    配置如下:
server:
  port: 8764

spring:
  application:
    name: springcloud-ribbon

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  • 4.3
    在启动类上加一个注解
    @EnableEurekaClient

并添加如下代码:

// 将RestTemplate注入到spring容器中
// LoadBalanced负载均衡默认为轮询
// 通过注入在controller中就可以使用调用生产者实例
@Bean
@LoadBalanced
RestTemplate restTemplate(){
    return new RestTemplate();
}

例图:
在这里插入图片描述

  • 4.4
    创建一个controller 测试一下
    实例如下:
    在这里插入图片描述
    这样ribbon 也就配置好啦 .

5 . 创建一个用来存放公共接口的maven项目,例如名叫springcloud-service-api,创建一个接口就好。
注意事项:service-api中的接口请求方式、参数、注解要和生产者重写的方法保持一致

  • 5.1
    创建一个service接口 例如名叫 : TestServiceApi
    然后将 feign消费者 service 接口中的方法都挪到这个TestServiceApi中,同时feign的service接口要继承一下这个TestServiceApi ,例如 :
    在这里插入图片描述
  • 5.2
    生产者里面的controller也要实现一下TestServiceApi,或者在feign的service实现类实现一下TestServiceApi,并且加上 @RestController 这个注解
  • 5.3
    在springcloud-service-api 项目的pom.xml 中加入此jar包 ,目的是让spring的注解生效,如下
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.6.RELEASE</version>
    </dependency>
</dependencies>

如图 :
在这里插入图片描述

  • 5.4
    生产者 与 消费者 都在pox.xml 里边加入对springcloud-service-api的依赖 。
    这个service-api也就配置好啦。

6 .
创建一个用来存放公共实体类的maven项目,例如名如 :springcloud-common
只需创建一个 model 就可以啦,然后在 service-api ,生产者,消费者 中的pom.xml中设置一下依赖就好了.

7 . 配置Hystrix熔断器

  • 7.1 创建熔断器类实现并实现service-api接口
  • 7.2 添加注解@Compent 与 @RequestMapping("/error") 将熔断器类注入spring容器中
    在这里插入图片描述
  • 7.3 改造feign项目中service中的接口,添加Fallback指定熔断器类,
@FeignClient(value = "springcloud-provider",fallback = TestServiceError.class)

如图 :
在这里插入图片描述

  • 7.4 开启熔断器机制
    添加以下配置,如图 :
    在这里插入图片描述
  • 7.5 在熔断器类中的方法返回相应的错误信息 .

8 .配置SpringCloud Config 全局配置中心

  • 8.1 在git上创建配置文件远程仓库

  • 8.2 创建一个文件夹,通过执行git命令在将仓库目录克隆到本地(也就是克隆到此文件夹中) ,例:
    克隆到本地的Git 命令: git clone

    后面的地址去github中复制一下 ,例:
    在这里插入图片描述

在这里插入图片描述

  • 8.3
    在目录中创建三个配置(环境名:dev开发(development environment)、test测试(testing environment)、pro正式(production environment))
    下面为生产者,当然消费者也如同生产者一样创建三个配置

例:
在这里插入图片描述
配置信息如下:(就是将项目中生产者里的配置信息放到这几个新创建的配置文件中,三个配置中的端口号不能相同,如果需要连接数据库,那些连接数据库的配置文件信息也可以放到新创建的配置文件中)

server:
  port: 8771

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka 

如图:
在这里插入图片描述
配置完之后记得要用git命令提交到GitHub上,如下图:

在这里插入图片描述

  • 8.4
    创建config server项目选择Spring Cloud Config 中的Config Server 和Spring Cloud Discovery 中的 Eureka Discover Client, 例如项目名叫springcloud-config

  • 8.5
    在配置中配置信息如下
    在这里插入图片描述

  • 8.6
    在启动上添加注解
    @EnableEurekaClient
    @EnableConfigServer

  • 8.7
    配置server client项目,以生产者项目为例(如果新创建的项目则需要选择config client :)
    导入pom信息:

            <dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-config-client</artifactId>
				<version>2.1.1.RELEASE</version>
			</dependency>

将配置文件的名称改为bootstrap.yml
(消费者同样也得把配置文件得名称改为bootstrap.yml然后进行配置)

  • 8.8

配置bootstrap.yml文件

		spring:
		  application:
			name: springcloudprovider-login
		  cloud:
			config:
			  # 分支
			  label: master
			  # 环境
			  profile: test
			  # config server 服务发现
			  discovery:
				# 开启服务发现
				enabled: true
				# 配置config server 服务实例
				service-id: springcloud-config

如图

在这里插入图片描述
最后试着访问一下浏览器:
http://localhost:8081/springcloud-provider/dev

9 . zuul路由网关

  • 9.1 创建zuul工程,选择 Web 中的Spring Web Stater ,Spring Cloud Discovery 中的 Eureka Discovery client, Spring Cloud Routing 中的 Zuul .
  • 9.2 在启动类上加:@EnableEurekaClient @EnableZuulProxy
  • 9.3
    在配置文件中配置如下:
    1)端口号
    2)实例名
    3)eureka
    4)zuul:
    routes:
    #消费者的名字自定义
    api-a:
    #请求转发的路径路径名自定义 代表请求的方法
    path: /api-a/

    #指定消费的实例名称
    serviceId: springcloud-pay-ribbon
    #可以配置多个路由请求转发
    abc:
    path: /api-b/**
    serviceId: springcloud-feign

如图:
在这里插入图片描述

  • 9.4 请求的路径http://localhost:8087/api-a/getNews
  • 9.5 过滤请求,在zuul项目新建过滤器类继承ZuulFilter 并添加 @Component

如图:
在这里插入图片描述
详情如下:

重写四个方法
			/*
				filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
					pre:路由之前 ,先执行过滤器再执行后台方法
					routing:路由之时, 执行完后台方法在执行过滤器
					post: 路由之后, 执行完后台方法在执行过滤器
					error:发送错误调用,如果请求正常没有错误,则不需要执行业务逻辑判断
			 */
			@Override
			public String filterType() {
				System.out.println("第一个过滤请求的类型。。" + System.currentTimeMillis());
				return "pre";
			}

			//过滤的顺序
			@Override
			public int filterOrder() {
				System.out.println("过滤的顺序");
				return 0;
			}

			//这里可以写逻辑判断,是否要过滤,true,永远过滤。
			@Override
			public boolean shouldFilter() {
				System.out.println("是否要过滤");
				return true;
			}

			//过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。
			@Override
			public Object run() throws ZuulException {
				System.out.println("业务逻辑处理");
				RequestContext requestContext = RequestContext.getCurrentContext();
				HttpServletRequest request = requestContext.getRequest();
				String url = request.getRequestURL().toString();
				String method = request.getMethod();
				String flag = request.getParameter("flag");
				System.out.println(url);
				System.out.println(method);
				System.out.println(flag);
				Object obj = request.getSession().getAttribute("sessionUser");
				if(StringUtils.isEmpty(flag) || obj == null){
					try {
						requestContext.setSendZuulResponse(false);
						requestContext.setResponseStatusCode(401);
						HttpServletResponse response = requestContext.getResponse();
						//让浏览器用utf8来解析返回的数据
						response.setHeader("Content-type", "text/html;charset=UTF-8");
						//servlet用UTF-8转码,而不是用默认的ISO8859
						response.setCharacterEncoding("utf-8");
						response.getWriter().write("请求需要传入flag标识符 或者 用户没有登录");
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				return null;
			}

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是老贺,我们下期见~~

在这里插入图片描述

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值