我有一个配置服务器,具有属性和微服务作为使用者。
我尝试配置maxAttempts以避免重试消费者微服务,但这似乎不起作用。
我还定义了配置服务器上的绑定属性,它们工作正常。我的消费者正在收听和接收消息,但是它尝试了3次,然后崩溃了。
这是我在配置服务器中的application.yml
server:
servlet:
contextPath: /cmsrsssitemap/v1
spring:
cloud:
stream:
bindings:
sitemap-main-output:
destination: sitemap-main
group: cms-microservices-v1
content-type: application/json
#consumer.concurrency: 2
test-job-output:
destination: test-job
group: cms-microservices-v1
content-type: application/json
rabbit:
bindings:
test-job-output:
consumer:
maxAttempts: 1
requeueRejected: false
autoBindDlq: true
#dlqTtl: 5000
#requeueRejected: false
#dlqDeadLetterExchange: dltexchange1
#republishToDlq: true
这是生产者端的application.yml
server.servlet.contextPath: /cmsjmshandler/v1
spring:
cloud:
stream:
bindings:
sitemap-main-input:
destination: sitemap-main
content-type: application/json
test-job-input:
destination: test-job
group: cms-microservices-v1
content-type: application/json
这是骗子。它抛出一个NullPointer进行测试
@Component
public class TestJobListener {
@StreamListener(StreamProcessor.TEST_JOB)
public void testJobInput(@Payload String input) throws InterruptedException {
// Thread.sleep(3000);
System.out.println("########################### "+new Date() + " Mensaje Recibido");
throw new NullPointerException();
}
}
StreamProcesor.java
public interface StreamProcessor {
public static final String TEST_JOB = "test-job";
public static final String SITEMAP_MAIN = "sitemap-main";
@Input(StreamProcessor.TEST_JOB)
SubscribableChannel testJobOutputInput();
@Input(StreamProcessor.SITEMAP_MAIN)
SubscribableChannel processSitemapMain();
}
这样做的目的是将失败的消息移至DLQ,但这也不起作用
编辑1:无法使其正常工作。我已经根据Artem Bilan进行了更改,但这也不起作用。
server:
servlet:
contextPath: /cmsrsssitemap/v1
spring:
cloud:
stream:
bindings:
test-job-output:
destination: test-job
group: cms-microservices-v1
content-type: application/json
consumer:
maxAttempts: 1
rabbit:
bindings:
test-job-output:
consumer:
requeueRejected: false
答案 0 :(得分:1)
maxAttempts
不是rabbit
属性。这是一个核心。
spring.cloud.stream.bindings.input.consumer.max-attempts=1
spring.cloud.stream.rabbit.bindings.input.consumer.requeue-rejected=true
答案 1 :(得分:0)
问题是我在StreamProcesor上输入了错误的名称
case 'REMOVE_FL_EVENT' :
return{
...state,
events: Object.keys(state.events).map(group => {
return state.events[group].filter(item => item.id !== action.id)
})
}
StreamProcesor.TEST_JOB应该是频道名称,也不是目的地。更新我的问题。
更正了SteamProcesor.java StreamProcesor.java
@StreamListener(StreamProcessor.TEST_JOB)
答案 2 :(得分:0)