net 获取本地ip地址,net mvc + net core 两种

net mvc

 public static string GetIP(HttpRequestBase request)
        {
            // 尝试获取 X-Forwarded-For 头
            string result = request.Headers["X-Forwarded-For"]?.Split(',').FirstOrDefault()?.Trim();

            if (string.IsNullOrEmpty(result))
            {
                // 获取用户的 IP 地址
                result = request.UserHostAddress;
            }

            // 如果获取到的是 "::1" 或者空值,尝试使用主机名
            if (string.IsNullOrEmpty(result) || result == "::1")
            {
                result = request.Url.Host; // 返回主机名
            }

            // 如果仍然没有找到有效的 IP 地址,返回默认值
            return string.IsNullOrEmpty(result) ? "127.0.0.1" : result;
        }

//上面是方法,下面是调用
  string ipaddress = GetIP(Request);

net core

public static string GetIP(HttpContext? context)
{

    string result = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
    if (string.IsNullOrEmpty(result))
    {
        result = context.Connection.RemoteIpAddress?.ToString();
    }
    if (string.IsNullOrEmpty(result))
    {
        result = context.Request.Host.ToString();
    }

    if (string.IsNullOrEmpty(result))
    {
        return "127.0.0.1";
    }
    return result;
}

//上面是方法,下面是调用
GetIP(HttpContext)

这样获取到的地址跟百度上直接搜的ip是一样的

### 两种方式运行 Sentinel 的详细说明 #### 方式一:通过 Redis-Sentinel 启动 Sentinel 系统 Redis Sentinel 是一种高可用解决方案,用于监控 Redis 主从实例并实现自动故障转移。可以通过以下命令启动 Sentinel 系统: ```bash redis-sentinel /path/to/sentinel.conf ``` 此命令需要指定一个配置文件路径 `/path/to/sentinel.conf`,其中包含了 Sentinel 的各项参数设置[^1]。 以下是 `sentinel.conf` 文件的关键配置项及其作用: - **sentinel monitor**: 定义要监控的主服务器名称、IP 地址和端口号。 ```conf sentinel monitor mymaster 127.0.0.1 6379 2 ``` 上述配置表示监控名为 `mymaster` 的主服务器,其 IP 和端口分别为 `127.0.0.1` 和 `6379`,至少需要 2 个 Sentinel 实例同意才能执行故障转移操作[^3]。 - **sentinel down-after-milliseconds**: 设置判定主服务器下线的时间阈值(单位为毫秒)。 ```conf sentinel down-after-milliseconds mymaster 5000 ``` - **sentinel failover-timeout**: 故障转移超时时间。 ```conf sentinel failover-timeout mymaster 60000 ``` 完成上述配置后,保存文件并通过前述命令启动 Sentinel 即可正常工作。 --- #### 方式二:在 Spring Cloud 应用中集成 Sentinel 并定义限流规则 Spring Cloud 提供了对 Alibaba Sentinel 的支持,可以将其嵌入应用程序中作为 HTTP Server 来接收来自 Sentinel 控制台的动态规则推送。这种方式适用于微服务架构中的流量控制场景。 ##### 步骤 1:引入依赖 在项目的 `pom.xml` 或 `build.gradle` 文件中添加 Sentinel 相关依赖: ```xml <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.3</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2021.1</version> </dependency> ``` ##### 步骤 2:配置 Sentinel 参数 编辑 `application.yml` 文件,添加 Sentinel 的传输端口配置: ```yaml spring: cloud: sentinel: transport: port: 8719 dashboard: localhost:8080 ``` 此处设置了本地应用监听的端口为 `8719`,并与 Sentinel 控制台地址 `localhost:8080` 进行绑定[^2]。 ##### 步骤 3:定义限流资源 在代码层面标注需要保护的服务接口或方法。例如,在控制器类中使用注解声明资源: ```java import com.alibaba.csp.sentinel.annotation.SentinelResource; @RestController public class ExampleController { @GetMapping("/testA") @SentinelResource(value = "resourceTestA", blockHandler = "handleException") public String testA() { return "Hello, this is resource A!"; } public String handleException(BlockException ex) { return "Oops! Resource limit exceeded."; } } ``` 上述代码片段中,`@SentinelResource` 注解标记了名为 `resourceTestA` 的资源,并指定了异常处理函数 `handleException` 处理被阻断的情况。 ##### 特殊注意点 当采用链路模式进行流控时,默认情况下所有进入 Spring MVC 的请求会被分配相同的根资源 (`root`),这可能导致无法区分不同的调用链路而使规则失效。因此建议手动调整资源配置逻辑以满足具体需求[^4]。 --- ### 总结 以上分别介绍了基于独立进程运行的 Redis Sentinel 和嵌入式 Spring Cloud Sentinel 的两种运行方式。前者主要用于数据库集群的高可用保障;后者则侧重于分布式系统的流量防护与治理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值