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

news2024/12/23 13:37:23

文章目录

  • 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自带功能或者插件进行拓展,这个就留给大家根据各自的业务需求进行探索了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity编辑器扩展:创建一个欢迎窗口,在启动Editor的时候显示自定义窗口。

Unity编辑器扩展:创建一个欢迎窗口,在启动Editor的时候显示自定义窗口。 在Unity开发过程中,经常会遇到需要向其他人展示重要信息的情况,比如项目文档、脚本说明、插件介绍等。这个窗口不仅能够展示必要的文档信息,还…

苍穹外卖(瑞吉外卖)--环境搭建

作为软件开发工程师,在编码的过程中就不可避免地会接触多种软件环境,我们主要来分析在工作中经常遇到的三套环境, 分别是: 开发环境、测试环境、生产环境 开发环境 在开发阶段使用的环境,就是开发环境,一般外部用户无…

解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题

文章目录 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题不识别CH340/CH341报错解决办法升级驱动编译安装 卸载brltty程序 vscode espidf插件无法选择串口设备节点问题解决办法编译安装 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插…

路径规划——Jump Point Search算法

路径规划——Jump Point Search算法 算法原理 跳点搜索算法(Jump Point Search),简称JPS,是由澳大利亚两位教授于2011年提出的基于Grid格子的寻路算法。JPS算法在保留A Star算法的框架的同时,进一步优化了A Star算法寻找后继节点的操作。 A…

异常在代码中的两个作用

一.异常的作用: 作用一:异常是用来查询bug的关键参考信息。 作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况。 二.举例: 例1: 一个JavaBean类: package com.itheima.a01MyExpection;public class Student { private String name; private int…

Mamba-YOLO : 基于SSM的YOLO目标检测算法(附代码)

代码地址:GitHub - HZAI-ZJNU/Mamba-YOLO: the official pytorch implementation of “Mamba-YOLO:SSMs-based for Object Detection” 论文地址:https://arxiv.org/pdf/2406.05835 在深度学习技术的快速进步推动下,YOLO系列为实时…

前端VUE低代码平台有哪些?盘点几款,你且看看有没有用得上的

前端低代码平台有哪些?盘点几款,你且看看有没有用得上的。 1、GOVIEW GoView 是一个使用 Vue3 搭建的低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。它的技术栈为:Vue3 T…

vant 组件中事件选择器的一些小用法

获取当前所在的月份的月初和当天的日期 computed: {// 默然展示月初的第一天formattedFirstDayOfMonth() {const now new Date();const firstDayOfMonth new Date(now.getFullYear(), now.getMonth(), 1);const year firstDayOfMonth.getFullYear();const month (firstDay…

聚星文社原版本绘唐科技AI推文工具

聚星文社原版本绘唐科技AI推文工具是一种可以帮助用户生成推文内容的人工智能工具。它通过分析大量的文本和数据,学习了推文的写作风格和语言特点,并能够根据用户提供的关键词和要求,生成符合要求的推文内容。 这个工具可以快速生成高质量的推…

C语言一笔画迷宫

目录 开头程序程序的流程图程序游玩的效果结尾 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <Windows.h> void printmaze(const char strmaze[11][11]) {int ia 0;…

金蝶云星空元数据冲突SVN:replaced,tree conflict树冲突解决过程

文章目录 SVN:replaced,tree conflict树冲突解决过程问题解决方案 SVN:replaced,tree conflict树冲突解决过程 问题 解决方案

五参数防爆气象站

五参数防爆气象站是一种用于监测环境气象条件和预测潜在爆炸危险的装置。其功能包括以下五个方面&#xff1a; 温度监测&#xff1a;防爆气象站能够实时监测环境的温度变化&#xff0c;并且能够提供温度的历史记录和趋势预测。这对于防止设备过热和爆炸具有重要意义。 湿度监测…

场外个股期权优劣有哪些?场外个股期权有风险吗?

今天带你了解场外个股期权优劣有哪些&#xff1f;场外个股期权有风险吗&#xff1f;个股场外期权&#xff0c;作为非交易所交易的股票期权合约&#xff0c;为投资者提供了独特的投资渠道。 场外个股期权&#xff08;OTC个股期权&#xff09;的优势&#xff1a; 1.灵活性&…

网络间通信

1、udp通信 特点&#xff1a;&#xff08;1&#xff09;无连接 &#xff08;2&#xff09;不可靠 2、udp编程&#xff08;c/s模型&#xff09; ssize_t recvfrom(int sockfd, //socket的fd void *buf, //保存数据的一块空间的地址 …

鸿蒙弹窗实现乱象?带你玩转正确的实现姿势

最近看到很多童鞋吐槽鸿蒙自定义弹窗的实现,也有不少童鞋提供了各式各样的低耦,轻巧方向的优化方案,但多数参差不齐,甚至有基于老API(白玩,以后还得废弃掉…)给的方案,为避免如此“乱象”遂提出正确的实现姿势。 姿势一 如果您没有特别的要求,系统AlertDialog(API 6+)…

新加坡门店客流计数器,AI智能识别算法加持,精准完成统计分析

在数字化转型的大潮下&#xff0c;零售业正经历着前所未有的变革。为了更好地理解顾客行为并优化店铺运营&#xff0c;新加坡的零售门店开始采用搭载AI智能识别算法的客流计数器系统。这套系统不仅能够精准统计顾客流量&#xff0c;还能提供深入的分析报告&#xff0c;帮助商家…

tcp 和udp通信

一.recvfrom recvfrom函数是一个系统调用&#xff0c;用于从套接字接收数据。该函数通常与无连接的数据报服务&#xff08;如 UDP&#xff09;一起使用&#xff0c;但也可以与其他类型的套接字使用。与简单的 recv() 函数不同&#xff0c;recvfrom() 可以返回数据来源的地址信息…

“肯将玉钳作双戟,一舞天下定乾坤。”记唐铎《墨龙图》之中的笔墨画意

唐铎&#xff0c;1957 年生于北京&#xff0c;国家一级美术师&#xff0c;曾先后师从于刘文西、黄申发老师&#xff0c;原名唐京鸣&#xff0c;京城人士&#xff0c;取其名&#xff0c;不鸣则已&#xff0c;一鸣惊人之意&#xff0c;学画三十余年&#xff0c;专注于齐派虾蟹&am…

算法工程师第四十四天(99. 岛屿数量 深搜 99. 岛屿数量 广搜 100.岛屿的最大面积 )

参考文献 代码随想录 一、岛屿数量 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包…

Android 安卓Compose软键盘和Activity页面的协调处理问题

文章目录 问题展示1、输入框展示不完整&#xff0c;且布局被顶出屏幕外2、输入框被软键盘完全覆盖 解决方案最终演示 问题展示 1、输入框展示不完整&#xff0c;且布局被顶出屏幕外 这是默认处理的样式 2、输入框被软键盘完全覆盖 当在AndroidManifest.xml Activity标签上加…