Spring Cloud Stream RabbitMQ 配置死信队列,消费死信队列
Application.java
package com. buxiaoxia;
import lombok. extern. slf4j. Slf4j;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. boot. CommandLineRunner;
import org. springframework. boot. SpringApplication;
import org. springframework. boot. autoconfigure. SpringBootApplication;
import org. springframework. cloud. stream. annotation. EnableBinding;
import org. springframework. cloud. stream. annotation. StreamListener;
import org. springframework. integration. support. MessageBuilder;
import org. springframework. messaging. Message;
@SpringBootApplication
@EnableBinding ( { PayValidateSink. class , PayOutputSink. class } )
@Slf4j
public class Application implements CommandLineRunner {
@Autowired
private PayOutputSink payOutputSink;
public static void main ( String[ ] args) {
SpringApplication. run ( Application. class ) ;
}
@Override
public void run ( String... strings) throws Exception {
payOutputSink. afterLoanComplete ( ) . send ( MessageBuilder. withPayload ( "adfadf" ) . build ( ) ) ;
}
@StreamListener ( "inputBinding" )
public void getMessage ( Message message) {
Long startTime = System. currentTimeMillis ( ) ;
log. info ( "接收到死信队列的消息{}" , message) ;
Long endTime = System. currentTimeMillis ( ) ;
log. info ( "耗时{}" , endTime- startTime) ;
}
}
PayOutputSink.java
package com. buxiaoxia;
import org. springframework. cloud. stream. annotation. Output;
import org. springframework. messaging. MessageChannel;
public interface PayOutputSink {
@Output ( "outputBinding" )
MessageChannel afterLoanComplete ( ) ;
}
PayValidateSink .java
package com. buxiaoxia;
import org. springframework. cloud. stream. annotation. Input;
import org. springframework. messaging. SubscribableChannel;
public interface PayValidateSink {
@Input ( "inputBinding" )
SubscribableChannel bindingsOf1 ( ) ;
}
application.yml
server:
port: 8081
spring:
cloud:
stream:
binders:
defaultRabbit:
type: rabbit
defaultBinder: defaultRabbit
bindings:
inputBinding:
group: product- deadletter- queue
outputBinding:
producer:
required- groups: product- group #生产者exchange绑定队列
rabbit:
bindings:
outputBinding:
producer:
ttl: 3000 #消息3 秒不消费转入私信队列
autoBindDlq: true #启动私信队列
deadLetterExchange: inputBinding #绑定exchange
deadLetterQueueName: inputBinding. product- deadletter- queue #死信队列名字:exchanName. queueName
application:
name: spring- cloud- stream- rabbitmq
rabbitmq: # 默认的 mq的配置时候,上述的配置方式,可以支持多个 broker
port: 5672
host: localhost
username: root
password: 123456
`` `