spring boot项目中使用nacos+sentinel,feign: sentinel: enabled: true 运行服务报错

最近的开发工作中,遇到了一个让我感到困惑的问题。当我尝试使用Nacos注册中心和Sentinel流控组件,以及启用Feign中的Sentinel支持时,我的服务无法正常运行,而是抛出了一个错误。通过我的学习和研究,我成功解决了这个问题。现在就和大家分享一下我的经验,并提供相应的程序代码。

首先来看一下我在用于配置Feign的应用程序.properties文件中做了哪些修改:

# 启用Sentinel支持
feign.sentinel.enabled=true

上述配置的目的是启用Feign中的Sentinel支持,以确保我们的服务能够与Sentinel进行交互。

接下来,让我们看一下我在使用Nacos作为注册中心时的配置。

在pom.xml文件中,添加Nacos和Sentinel的依赖:

<dependencies>
    <!-- Nacos 客户端依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <!-- Sentinel 客户端依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
</dependencies>

接下来,我们需要在application.properties文件中配置Nacos的相关信息:

# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=your-service-name
spring.cloud.nacos.discovery.namespace=
spring.cloud.nacos.discovery.group=DEFAULT_GROUP

此处需要注意的是,spring.application.name属性应设置为你自己的服务名称。

现在,让我们来看一下在使用Nacos和Sentinel的同时启动服务时可能遇到的报错现象。

当我们尝试启动服务时,可能会收到类似以下的错误信息:

NoClassDefFoundError: com/alibaba/csp/sentinel/servlet/ServletFilter

这个错误是由于没有正确加载Sentinel依赖导致的。要解决这个问题,我们需要进行一些额外的配置。

在我们的项目中,创建一个ServletInit类,实现ServletContextInitializer接口,并在其中添加以下代码:

@Configuration
public class ServletInit implements ServletContextInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        // 注册 Sentinel 监听器
        servletContext.addListener(new com.alibaba.csp.sentinel.adapter.servlet.listener.WebAppInitializer());
        // 注册 Sentinel 过滤器
        FilterRegistration.Dynamic filterRegistration = servletContext.addFilter("SentinelFilter",
                new com.alibaba.csp.sentinel.adapter.servlet.CommonFilter());
        filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
    }
}

这些代码会在应用程序启动时注册Sentinel的监听器和过滤器,确保Sentinel能够正确工作。

现在,可以重新启动我们的服务,并且不再遇到上述错误。

综上所述,通过正确配置Nacos和Sentinel,并进行必要的初始化操作,成功解决了使用Nacos和Sentinel、启用Feign中的Sentinel支持时遇到的问题。希望我的分享能帮助到你解决类似的问题。

猜你喜欢

转载自blog.csdn.net/javamendou/article/details/131624959