分布式电商项目十二:使用Gateway作为API网关

使用Gateway作为API网关

Gateway是springcloud官方推出的第二代网关框架,替换了Zuul网关。
具体内容可以参考官方文档
工作原理:
在这里插入图片描述
客户端先将请求发给我们的网关,网关通过映射信息,判断能够被处理和路由,随后进入Web Handler处理,之后给到过滤器中,通过过滤之后到达微服务的服务端。

Gateway使用主要分为两部分:路由工厂过滤器工厂
具体可以参考链接中的文档。

创建Gateway作为API网关

新建一个springboot模块作为我们的API网关:
在这里插入图片描述
随后选择springboot版本,添加Gateway网关模块:
在这里插入图片描述
随后修改pom文件,由于需要使用Nacos的服务注册功能,所以我们添加common的依赖。

        <dependency>
            <groupId>com.lastingwar.mall</groupId>
            <artifactId>mall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

随后我们开启注册服务的注解

@EnableDiscoveryClient
@SpringBootApplication
public class MallGatewayApplication {

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

}

同时在mall-gateway/src/main/resources/application.properties 配置文件中添加连接注册中心的内容:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=mall-gateway
server.port=88

因为在上一章中,我们已经使用Nacos来进行配置中心的集中配置,所以我们给网关模块也新建配置文件bootstrap.properties。
现状Nacos命名空间中创建gateway命名空间
在这里插入图片描述
同时添加信息到bootstrap.properties中:让他能够使用Nacos配置中心的配置文件

spring.application.name=mall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=8051481d-811d-41de-be2f-79f02792bb54

此时如果启动该程序,系统会报错


Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).


这是由于网关服务依赖了common模块,而common模块在进行mybatis-plus构建的时候发现没有关于数据库的配置地址。而我们的网关服务目前不需要数据库相关的配置,所以我们在主程序上添加注解,忽略掉有关数据库的配置:

@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MallGatewayApplication {

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

}

随后再启动gateway模块,通过控制台能看到已经在88端口启动了:

2020-05-30 17:12:16.163  INFO 14744 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 88
2020-05-30 17:12:17.517  INFO 14744 --- [           main] o.s.cloud.commons.util.InetUtils         : Cannot determine local hostname
2020-05-30 17:12:17.733  INFO 14744 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, mall-gateway 192.168.222.1:88 register finished
2020-05-30 17:12:17.736  INFO 14744 --- [           main] c.l.mall.gateway.MallGatewayApplication  : Started MallGatewayApplication in 11.12 seconds (JVM running for 11.89)

Gateway使用的测试

接下来我们利用网关来开发一个小功能进行测试,当我们访问http://localhost:88/hello?url=baidu时,让网关跳转到www.baidu.com

首先我们需要对网关进行配置
配置的方法参考官方文档,官方推荐我们使用yml文件进行配置,所以我们创建一个文件application.yml在mall-gateway/src/main/resources目录下:

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

routes是指我们配置的是路由规则,它是一个列表能够配置多种规则,id是路由的名称,uri是转向的地址,predicates是路由规则,同样是一个列表,Query是官方提供的路由规则的一种,内容匹配,指我们访问的内容之中包含有url的参数,且值等于baidu时,访问地址https://www.baidu.com

此时重启服务,我们访问http://localhost:88/hello?url=baidu时,让网关跳转到www.baidu.com。会发现能够跳转到百度页面,但是会出现网页不存的标语。这是因为网关把我们写入的/hello请求也转入到了要访问的地址中,相当于我们访问了http://www.baidu.com/hello页面。
修改访问地址为http://localhost:88?url=baidu即可正常访问。

至此我们的网关已经能够正常使用了,具体的使用内容我们到项目开发时再进行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天猫是中国最大的电商平台之一,其背后支撑的是一套高并发、分布式的架构设计。在天猫的架构设计中,Java作为主要的开发语言之一,扮演了重要的角色。 首先,天猫的架构设计采用了分布式的思想。在天猫的系统中,不同的功能模块被拆分为独立的服务,每个服务都运行在不同的服务器上,实现了内容的分布与并发处理。这种架构设计可以实现高可用性和横向扩展的特性,使得系统在面对亿级高并发时能够保持稳定。 其次,天猫的架构设计注重性能优化。在天猫的系统中,通过使用缓存技术和负载均衡技术,优化了系统的响应时间和吞吐量。同时,利用集群和分布式数据库等技术,实现了数据的高可靠性和快速读写。通过这些手段,天猫在高并发情况下能够有效地提供服务,保证用户的购物体验。 另外,天猫的架构设计还考虑了安全性和可扩展性。在安全方面,天猫采用了多层次的安全机制,包括数据加密、防火墙等,确保用户的信息和交易数据的安全。在可扩展性方面,天猫的系统可以随着用户数量的增加进行水平扩展,通过增加服务器数量和服务节点,提高系统的并发处理能力。 总的来说,天猫的架构设计在Java的支持下,通过分布式、性能优化、安全性和可扩展性等方面的设计,实现了对亿级高并发的支持。这个设计可以为电商行业提供参考,帮助其他电商平台构建具有高并发能力的系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值