SpringCloud学习笔记029---在SpringCloud项目中使用Zuul实现基本的网关统一处理

版权声明:本文为博主原创文章,未经博主credreamer 允许不得转载 违者追究法律责任。 https://blog.csdn.net/lidew521/article/details/82118181

 JAVA技术交流QQ群:170933152 

这部分很简单,zuul的使用,很简单,就是在已经注册到eureka的中,原来可能访问服务,通过

localhost:8010/api/v1/user/add

这样访问,现在变成:

localhost:8010/sc-admin/api/v1/user/add 这样访问,可以看到,其实就是多加了一层,加了一个在eureka中注册的名字

而已,这样多个服务的话,就可以都使用这样的地址了,就不会有一个服务还得用一个端口号,这么麻烦

---------------------------------好下面开始使用zuul--------------------

先说用法,原理下面啰嗦:

项目结构,下面的sc-gateway就是,网关服务

1.首先新建一个项目:

注意要新建一个module,不要新建项目,不要用maven的,父项目,子项目的,这样的话会有问题,在idea中,只能同时启动

一个项目,很麻烦。。。

2.给这个module起名:sc-gateway

配置一下就能用了:
E:\IdeaWkSpace\SmartCommunity\sc-gateway\src\main\resources\application.properties

spring.application.name=sc-gateway
server.port=8020

#zuul.routes.api-a.path=/producer/**
#zuul.routes.api-a.url=spring-cloud-producer

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

#暂时先不监控接口调用速度监测
#spring.zipkin.base-url=http://localhost:9000
#spring.sleuth.sampler.percentage=1.0

3.注意上面 server.port=8020 8020,就是统一网关的端口

  spring.application.name=sc-gateway 这个名字是给项目起的注册在eureka中的名字

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
这个是eureka的注册地址,注意如果有多个eureka的话,比如有eureka集群,name用逗号隔开就行,注意这里我发现其实一个springboot项目在application.properties这里仅仅配置好:eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
这样就可以实现,这个服务,自动注册到eureka了,不需要在:
在application这个类中加入:@EnableDiscoveryClient ,不加也是可以的,当然加上也行




如果配置eureka集群的话,就可以像下面这样:

4.再看一下这个:
E:\IdeaWkSpace\SmartCommunity\sc-gateway\src\main\java\cn\gov\rongcheng\scgateway\ScGatewayApplication.java

package cn.gov.rongcheng.scgateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@SpringBootApplication
public class ScGatewayApplication {

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

5.解释一下注解:

添加启动函数 添加启动函数ZuulApplication 有两个重要的注解,@EnableZuulProxy是要启用zuul的代理服务器功能,@EnableDiscoveryClient表示要启动服务注册发现功能 package com.pachiraframework.springcloud.zuul;
 

6.看看pom.xml 主要加入了:

这两个:
 

6.看看完整的:pom.xml (这个不用看也行,就上面那两个就够了)

E:\IdeaWkSpace\SmartCommunity\sc-gateway\pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>cn.gov.rongcheng</groupId>
	<artifactId>sc-gateway</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>sc-gateway</name>
	<description>网关模块</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.15.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Edgware.SR4</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zipkin</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</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>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

7.然后直接跑就可以了,注意,先跑

注册中心,然后跑sc-admin(一个测试的微服务),然后再跑sc-gateway

8.访问:

原来访问sc-admin可能这样访问:

http://localhost:8010/api/v1/ 这里的8010,就是sc-admin在

E:\IdeaWkSpace\SmartCommunity\sc-admin\src\main\resources\application.properties

中配置的端口:可以看到了,注意其他部分不用看,都拷贝过来了,只看

spring.application.name=sc-admin
spring.profiles.active=dev
server.port=8010

这个就行

spring.application.name=sc-admin
spring.profiles.active=dev
server.port=8010

# 404 交给异常处理器处理
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
#输出sql日志 debug用
logging.level.cn.gov.rongcheng.scadmin.dao=debug

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

#mybatis.type-aliases-package=cn.gov.rongcheng.scadmin
#mybatis.mapper-locations=classpath:cn/gov/rongcheng/scadmin/*.xml
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.19.128.38:3306/sc-admin?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
#开启断路器
feign.hystrix.enabled=true

#消息服务配置
spring.rabbitmq.host=172.19.128.38
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.port=5672

9.现在配置完了统一路由,也可以这样访问了:

http://localhost:8020/sc-admin/api/v1/

如果再有一个项目,就可以这样访问:

http://localhost:8020/sc-gps/api/v1/

10.当然现在用两种访问方式都是可以的

11.去看看注册服务中心

已经有了 

-------------------------------------------------------zuul的配置就完了-------------------------

下面说原理,顺便把eureka的配置也把图贴上:

说eureka的配置:

1.E:\IdeaWkSpace\SmartCommunity\sc-regcenter\src\main\java\cn\gov\rongcheng\scregcenter\ScRegcenterApplication.java

package cn.gov.rongcheng.scregcenter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class ScRegcenterApplication {

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

2.E:\IdeaWkSpace\SmartCommunity\sc-regcenter\src\main\resources\application.properties

#不要自己注册自己
spring.application.name=spring-eureka-server
#注册中心集群使用8000-8005之间的端口
server.port=8000

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

3.E:\IdeaWkSpace\SmartCommunity\sc-regcenter\pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>cn.gov.rongcheng</groupId>
	<artifactId>sc-regcenter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>sc-regcenter</name>
	<description>注册中心</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.15.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Edgware.SR4</spring-cloud.version>
	</properties>

	<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>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

eureka就可以了。。。

然后再看看zuul的 

原理就可以了

原理的话,百度一下吧,太长了不贴了

猜你喜欢

转载自blog.csdn.net/lidew521/article/details/82118181