4. SpringBoot使用jms設定錯誤處理(errorHandler)


此次主要介紹jmsTemplate errorHandler

目標:可以讓jmsTemplate 有errorHandler(例外處理)
雖然很白話但這是事實,不過我們先開始介紹一下ExceptionHandler

以前接觸的spring web
是使用@ControllerAdvice可以註冊 當Request Api來的請求,若發生錯誤可以進行例外處理

現在接觸的spring jms
是使用一般的ErrorHandler實作出來 註冊到jmsTemplate這個機制中

必須知識:

java 8
spring系列
MVC 分層抽離
mq的基本知識
可能需要會通靈,解釋性資訊不多XD

spring boot核心應用為以下

  1. spring starter
  2. mq spring starterspring
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.7.11</version>
      <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependency>
      <groupId>com.ibm.mq</groupId>
      <artifactId>mq-jms-spring-boot-starter</artifactId>
      <version>2.0.0</version>
    </dependency>
    

JmsErrorHandler.class 實作ErrorHandler

@Slf4j
@Configuration
public class JmsErrorHandler implements ErrorHandler {

    private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();

    @Override
    public void handleError(Throwable t) {
        Throwable retrieved = t.getCause();
         Exception exception = (Exception) retrieved;
         String errorResponse = exception.toString();
        log.info(gson.toJson(errorResponse)); // 因為此範例會將錯誤顯示在server log/ console
    }
}

上篇用到的class 設定到jmsTemplate
factory.setErrorHandler(jmsErrorHandler);

@Slf4j
@EnableJms
@Component
public class JmsListener {

@Autowired
JmsErrorHandler jmsErrorHandler;

@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
                                                DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    factory.setErrorHandler(jmsErrorHandler);
    return factory;
}
}

應用時
JmsMessageService省略介面
直接實作

@Service
public JmsMessageServie implment JmsMessageService{

if(Bollean.FALSE.equals(sthFlag)){
    throw new IOException("存取錯誤");
}

}

補充:

需要有mq服務 建議可以使用containter方便又快速

主要是給自己的一個紀錄,也分享給有需要的夥伴
註解部分有提及一些參考的連結,有興趣可以點進去看看喔

這是一個心血來潮,產生的文章
若有喜歡或交流的部分都歡迎在下方留言,多多關照。

#mq #jmstemplate







你可能感興趣的文章

SCSS - map vs list / @for vs @each

SCSS - map vs list / @for vs @each

Day03:從迴圈看 bytecode

Day03:從迴圈看 bytecode

target="_blank" 風險問題處理,加入 rel="noreferrer noopener"

target="_blank" 風險問題處理,加入 rel="noreferrer noopener"






留言討論