• 2023年2月17日

宝塔使用docker部署rabbit MQ无法映射端口

使用宝塔(Linux)的终端用命令 docker run -d –name myrabit -p 15672:15672 -p 5672:5672 rabbitmq 安装rabbitMQ,并通过 rabbitmq-plugins enable rabbitmq_management 开启管理插件后,无法使用服务器IP:15672 访问到rabbitMQ的web管理界面。 可能问题: 1、未开放15672端口 解决方法:使用宝塔系统防火墙开启15672端口并重启网络服务,如果服务器与外网还有一层防火墙,记得也在这个防火墙开启15672端口。一般阿里云、腾讯云对每台服务器都有安全规则,这边记得添加15672端口。 2、服务器未启用ip映射(一般报错:WARNING:IPv4 forwarding is disabled. Networking will not work.) 解决方法: vi /etc/sysctl.conf net.ipv4.ip_forward=1 #添加这段代码 3、docker实际上未运行,这个是我遇到的,使用宝塔(Linux版本)左侧Docker菜单进去无论怎么看都是正在运行,一直无法映射端口,后来在应用程序中安装了docker管理器,发现对应的容器居然未运行。 解决方法:通过docker管理器启动rabbitmq容器

详细内容

uni.login异步请求

在开发过程中会遇到uni.login时需要执行一些网络请求,然而因为uni.login并不会等待网络请求结束后(哪怕网络请求使用了await)再返回。 可以通过new promise来实现异步化

详细内容

.net core中webapi发送和接受enum值自动转换enum类型

方法1:newtonjson Startup.cs设置: 模型定义时,给Enum字段加上特性,例如: 方法2:微软自带的System.Text.Json.Serialization; PS: 使用微软自带的Json时,日期格式转换会出错导致WebApi无法接收带有日期内容的对象,需要自行编写一个日期转换工具(下面部分代码转自https://blog.csdn.net/kukubashen/article/details/123798040) 然后Startup.cs中的注入修改为:

详细内容

js对象深度复制(不是引用)

面向对象开发中,对象(object)的直接赋值都是引用而已,新对象值发生变化原对象也会出现相应的变化。 例如: 但是有些时候开发并不希望出现这类问题,因此就需要复制而不是赋值而已。我们可以通过json的转换来实现复制。

详细内容

Chrome浏览器调用WebApi无法获取Response的Header

一个Web客户端项目,通过js获取ajax返回的response内容的header,无法获取到相应的值。 这个问题是浏览器的安全机制导致,需要在webapi向response的header添加Access-Control-Expose-Headers内容。 例如:

详细内容

.Net 6的Winform注入及使用WebApiClientCore

1、依赖:Microsoft.Extensions.DependencyInjection; 2、program.cs 3、Form1.cs 上面完成Winform的注入, 4、IXXX.cs定义 上面为api接口的定义

详细内容

ocelot网关动态路由部分无效问题

使用.net 6开发webapi并用ocelot配合consul搭建了api网关,为了减少配置工作,启用了ocelot的动态路由功能,出现了部分注册的service自动识别,部分无法识别!经检查发现是service注册的时候没有设定端口。 设定后恢复正常

详细内容

ocelot网关启用动态路由

为了简化ocelot网关路由配置,可以考虑使用动态路由模式。下面是相关的英文介绍: This feature was requested in issue 340. The idea is to enable dynamic routing when using a service discovery provider (see that section of the docs for more info). In this mode Ocelot will use the first segment of the upstream path to lookup the downstream service with the service discovery provider. An example of this would be calling Ocelot with a url like https://api.mywebsite.com/product/products. Ocelot will take the first segment of the path which is product and use it as a key to look up the service in Consul. If Consul returns a service Ocelot will request it on whatever host and port comes back from Consul plus the remaining path segments in this case products thus making the downstream call http://hostfromconsul:portfromconsul/products. …

详细内容

Ocelot配置参数参考

LoadBalancer将决定负载均衡的算法 对请求进行限流可以防止下游服务器因为访问过载而崩溃,这个功能就是我们的张善友张队进添加进去的。非常优雅的实现,我们只需要在路由下加一些简单的配置即可以完成。 在 GlobalConfiguration下我们还可以进行以下配置 认证 如果我们需要对下游API进行认证以及鉴权服务的,则首先Ocelot 网关这里需要添加认证服务。这和我们给一个单独的API或者ASP.NET Core Mvc添加认证服务没有什么区别。 然后在ReRoutes的路由模板中的AuthenticationOptions进行配置,只需要我们的AuthenticationProviderKey一致即可。 JWT Tokens 要让网关支持JWT 的认证其实和让API支持JWT  Token的认证是一样的 Identity Server Bearer Tokens 添加Identity Server的认证也是一样 Allowed Scopes 这里的Scopes将从当前 token 中的 claims中来获取,我们的鉴权服务将依靠于它来实现 。当前路由的下游API需要某个权限时,我们需要在这里声明 。和oAuth2中的 scope意义一致。 鉴权 我们通过认证中的AllowedScopes 拿到claims之后,如果要进行权限的鉴别需要添加以下配置 当前请求上下文的token中所带的claims如果没有 name=”UserType” 并且 value=”registered” 的话将无法访问下游服务。 请求头转化 请求头转发分两种:转化之后传给下游和从下游接收转化之后传给客户端。在Ocelot的配置里面叫做Pre  Downstream Request和Post …

详细内容

ocelot传递客户端IP

使用ocelot搭建的api网关,服务需要获取客户端IP时可通过ocelot传递客户端IP 在Routes的项目添加 UpstreamHeaderTransform节点为传递header设定,除了RemoteIpAddress,还有如下:

详细内容