当前位置: 首页 > news >正文

dubbo:dubbo+zookeeper整合nginx实现网关(四)

文章目录

  • 0. 引言
  • 1. nginx简介
  • 2. 集成nginx
    • 2.1 负载均衡实现
  • 3. 源码
  • 4. 总结

0. 引言

我们之前讲解过dubbo+zookeeper实现服务调用和注册中心,但是还缺乏一个统一的入口,即网关服务。dubbo+zookeeper的模式更加适合的网关组件为nginx,所以今天我们也专门讲解使用nginx来作为dubbo的网关

1. nginx简介

首先针对nginx的学习我们早在nginx专栏就已经从零说明过,如果对于该组件的基础使用还未掌握的,建议大家可以先学习下nginx专栏
Nginx快速上手专栏

在本期文章中重点涉及其中如下几篇内容
Nginx应用场景、安装、部署及设置开机自启(一)

负载均衡upstream配置详解(四)

nginx各类转发、代理配置详解|location、proxy_pass参数详解(五)

2. 集成nginx

2.1 负载均衡实现

1、首先我们演示的项目还是基于前几篇文章的项目,我们在order-server增加一个接口

    @Value("${server.port}")private Integer port;@GetMapping("getUser")public String getUser(){String userName = userService.getUserById(port);return userName + " getUser success";}

2、我们准备两个order-server,用于演示nginx的负载均衡转发

复制一份配置文件,文件名修改为application-8083.yaml,修改其中的端口为8083
在这里插入图片描述
3、idea中复制一份order-server的启动配置,重命名,然后在active profiles中书写8083(即application-xxx.yaml中的xxx)
在这里插入图片描述

在这里插入图片描述
4、启动两个order-server节点

5、在服务器上安装nginx服务,这里安装过程不再累述,参考上述nginx专栏文章

6、修改配置文件

vim /etc/nginx/conf.d/default.conf 

配置内容如下,可以看到定义了一个upstream,转发至两个order-server节点,如果要设置不同的负载均衡算法可以参考《负载均衡upstream配置详解(四》一文

注意定义的转发路径proxy_pass http://order_server/;,默认是有/的,表示绝对路径,匹配路径location中order-server会被消除

upstream order_server{server 192.168.244.1:8082;server 192.168.244.1:8083;
}server {listen       80;server_name  localhost;charset utf-8;location / {root   /data/dist;index  index.html index.htm;}location /order-server/ {proxy_pass http://order_server/; # 通过别名实现负载均衡转发proxy_set_header HOST $host; # 代理过程中添加host头部信息,防止通过ip访问时域名解析不到,不能被server_name解析到proxy_http_version 1.1; # 指定http协议版本proxy_connect_timeout 3s; # 连接后台服务器的超时时间proxy_read_timeout 3s; # 从后台服务器读取数据的超时时间proxy_send_timeout 3s; # 向后台服务器发送数据的超时时间}
}

7、保存后,我们重启nginx

nginx -t
nginx -s reload

8、访问接口http://[nginx ip]/order-server/getUser
在这里插入图片描述
在这里插入图片描述
多次访问可以发现8082,8083端口依次出现,这是因为nginx默认轮询算法,证明我们的配置生效了。

3. 源码

文中源码,可在https://gitee.com/wuhanxue/dubbo_wu_demo下载

4. 总结

如上我们即完成了一个基础版的nginx网关,如果要实现更多的网关功能,就是基于nginx自带功能或者插件进行拓展,这个就留给大家根据各自的业务需求进行探索了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • oracle liunx 常用命令
  • OpenID Connect(OIDC)认证--keycloak与springboot项目的整合
  • SpringBoot的内置缓存以及整合第三方缓存
  • 终端文档安全管理系统是什么?一文给你详解!
  • Spring Boot 3.3 【六】一文读懂 Logback 日志框架
  • 白酒与家庭:团圆时刻的需备佳品
  • 网络攻击常见技术方法(14种)
  • Kotlin学习-01创建kotlin学习环境
  • 程序员如何平衡日常编码工作与提升式学习?
  • RabbitMq实现延迟队列功能
  • 【CSS】使用 CSS 自定义属性(变量)-- var()
  • 基于python的汽车数据分析与可视化---附源码99290
  • 微信小程序详细登录流程
  • Jenkins 2.346.1完整搭建及项目部署安装
  • C语言家教记录(七)
  • 「译」Node.js Streams 基础
  • golang 发送GET和POST示例
  • javascript面向对象之创建对象
  • js如何打印object对象
  • php面试题 汇集2
  • Python学习之路16-使用API
  • Webpack 4x 之路 ( 四 )
  • 高度不固定时垂直居中
  • 记一次删除Git记录中的大文件的过程
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 聊一聊前端的监控
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 运行时添加log4j2的appender
  • 在weex里面使用chart图表
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • Spring第一个helloWorld
  • 关于Android全面屏虚拟导航栏的适配总结
  • #Linux(Source Insight安装及工程建立)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #php的pecl工具#
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (二)linux使用docker容器运行mysql
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (五)activiti-modeler 编辑器初步优化
  • (学习日记)2024.01.09
  • (转)EOS中账户、钱包和密钥的关系
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .java 9 找不到符号_java找不到符号
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net 调用php,php 调用.net com组件 --
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [Android]Android开发入门之HelloWorld