当前位置: 首页 > 面试题库 >

RabbitMq侦听器的ServletFilter等效项是什么?

荆修明
2023-03-14
问题内容

我有一个spring-boot对我实施的Web应用程序MDCFilter,增加了一个UUIDMDC伐木情况下,我可以在日志文件中找到。

Filter类看起来是这样的。

public class MDCFilter implements Filter {

  @Override
  public void init(FilterConfig filterConfig) {
  }

  @Override
  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
      throws IOException, ServletException {

    String requestId = UUID.randomUUID().toString();

    MDC.put(REQUEST_ID_KEY, requestId);
    response.addHeader("trace", requestId);
    try {
      chain.doFilter(req, resp);
    } finally {
      MDC.remove("trace");
    }
  }

  @Override
  public void destroy() {
  }
}

但是最近,我们转向通过队列来处理流量,我从文档中不知道要为消息侦听器复制此过滤器行为。

我的听众看起来像这样。

@RabbitListener(queues = "${queue1}")
public void receiveMessages(Message message) {
doTheBusinessLogic(message)
}

谁能指出我正确的方向?


问题答案:

使用容器的adviceChain。假设您正在使用Boot 2.0和简单的容器工厂,请覆盖boot的工厂以添加建议…

@SpringBootApplication
public class So49770881Application {

    public static void main(String[] args) {
        SpringApplication.run(So49770881Application.class, args);
    }

    @Bean(name = "rabbitListenerContainerFactory")
    public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer,
            ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        factory.setAdviceChain(new MDCAdvice());
        return factory;
    }

    public static class MDCAdvice implements MethodInterceptor {

        @Override
        public Object invoke(MethodInvocation invocation) throws Throwable {
            // pre process
            try {
                return invocation.proceed();
            }
            finally {
                // post process
            }
        }

    }

}


 类似资料:
  • 问题内容: 在MySQL中是否有等效于PostgresQL的notify和listen?基本上,我需要在Java应用程序服务器中监听触发器。 问题答案: 不,还没有像这样的内置函数。您需要使用诸如“ read” 0/1之类的预制标志进行选择来“ ping”(每1-5秒)数据库。后 用read = 1更新它

  • 问题内容: 我在网上寻找了此信息,但找不到确切解释。我看到的是一个Java接口,它作为参数在另一个类中作为“侦听器”传递。人们将各种侦听器添加到列表中,并通过一种方法将它们全部调用。 我不确定为什么要使用它。有人可以解释吗? 这是我的原始帮助帖子,有人告诉我使用监听器。 链接 问题答案: 在您链接的代码示例中, 为您的API用户提供了一种告诉您这样的方式: 这是一段代码。杀死怪物时,请回叫它。我会

  • 在致力于提高渐进式web应用程序的性能时,我遇到了一个新功能,我发现很难理解这个概念。 什么是被动事件侦听器,在我们的项目中需要它吗?

  • 问题内容: LINQ的Java等效项是什么? 问题答案: 现在使用Java 8向我们介绍了Stream API,这在处理集合时是类似的事情,但与Linq不太一样。 如果它是您正在寻找的ORM,例如Entity Framework,那么您可以尝试Hibernate

  • 嘿,当我运行应用程序时,它会给出一个错误java.lang.IllegalArgumentException:Invalid listener:null,这说明侦听器是空的。我是初学者,所以请大家帮忙解决这个问题。在这一行中出现错误:LocationManager.RequestLocationUpdates(provider,2000,0,locationListener);//这里是我的示例代

  • 问题内容: 有Swift的等效项吗?在中,我们通常使用: 如何在Swift中实现相同目标?我发现了一个功能: 但是,它很长,根本不方便。 问题答案: 将在斯威夫特的世界同样存在。 的,和参数均标有 该装置的同时调用该函数我们可以忽略这些参数的关键字。在这种情况下,将使用其默认值。 这得出一个结论,该方法调用可以简化为: Swift 5- 没什么变化,仍然可以这样工作。

  • 问题内容: 在Objective-C中,我使用以下代码删除所有子视图: 但是如何迅速使用它呢?我看到苹果文档迅速使用了该方法 但是当我尝试它时,出现错误: 有什么方法可以快速删除子视图? 问题答案: 已针对Swift 2.0(Xcode 7)更新 用途: 或像这样:

  • 问题内容: 在TSQL中,我可以声明: 在MySQL中,我无法编写相同的查询。 在MySQL中编写此查询的正确方法是什么? 问题答案: 行尾的分号。