@@ -52,7 +52,7 @@ private void init() {
5252
5353 private Consumer <?> subscribe (String name , ConsumerHolder holder ) {
5454 try {
55- final ConsumerBuilder <?> clientBuilder = pulsarClient
55+ final ConsumerBuilder <?> consumerBuilder = pulsarClient
5656 .newConsumer (SchemaUtils .getSchema (holder .getAnnotation ().serialization (),
5757 holder .getAnnotation ().clazz ()))
5858 .consumerName ("consumer-" + name )
@@ -67,18 +67,7 @@ private Consumer<?> subscribe(String name, ConsumerHolder holder) {
6767 method .setAccessible (true );
6868
6969 if (holder .isWrapped ()) {
70- PulsarMessage pulsarMessage = new PulsarMessage ();
71- pulsarMessage .setValue (msg .getValue ());
72- pulsarMessage .setMessageId (msg .getMessageId ());
73- pulsarMessage .setSequenceId (msg .getSequenceId ());
74- pulsarMessage .setProperties (msg .getProperties ());
75- pulsarMessage .setTopicName (msg .getTopicName ());
76- pulsarMessage .setKey (msg .getKey ());
77- pulsarMessage .setEventTime (msg .getEventTime ());
78- pulsarMessage .setPublishTime (msg .getPublishTime ());
79- pulsarMessage .setProducerName (msg .getProducerName ());
80-
81- method .invoke (holder .getBean (), pulsarMessage );
70+ method .invoke (holder .getBean (), wrapMessage (msg ));
8271 } else {
8372 method .invoke (holder .getBean (), msg .getValue ());
8473 }
@@ -90,32 +79,56 @@ private Consumer<?> subscribe(String name, ConsumerHolder holder) {
9079 }
9180 });
9281
93- if (consumerProperties .getDeadLetterPolicyMaxRedeliverCount () >= 0 ) {
94- clientBuilder .deadLetterPolicy (DeadLetterPolicy .builder ().maxRedeliverCount (consumerProperties .getDeadLetterPolicyMaxRedeliverCount ()).build ());
95- }
96-
9782 if (consumerProperties .getAckTimeoutMs () > 0 ) {
98- clientBuilder .ackTimeout (consumerProperties .getAckTimeoutMs (), TimeUnit .MILLISECONDS );
83+ consumerBuilder .ackTimeout (consumerProperties .getAckTimeoutMs (), TimeUnit .MILLISECONDS );
9984 }
10085
101- if (holder .getAnnotation ().maxRedeliverCount () >= 0 ) {
102- final DeadLetterPolicy .DeadLetterPolicyBuilder deadLetterBuilder = DeadLetterPolicy .builder ();
86+ buildDeadLetterPolicy (holder , consumerBuilder );
10387
104- deadLetterBuilder .maxRedeliverCount (holder .getAnnotation ().maxRedeliverCount ());
88+ return consumerBuilder .subscribe ();
89+ } catch (PulsarClientException e ) {
90+ throw new ConsumerInitException ("Failed to init consumer." , e );
91+ }
92+ }
10593
106- if (!holder .getAnnotation ().deadLetterTopic ().isEmpty ()) {
107- deadLetterBuilder .deadLetterTopic (holder .getAnnotation ().deadLetterTopic ());
108- }
94+ public void buildDeadLetterPolicy (ConsumerHolder holder , ConsumerBuilder <?> consumerBuilder ) {
95+ DeadLetterPolicy .DeadLetterPolicyBuilder deadLetterBuilder = null ;
10996
110- clientBuilder .deadLetterPolicy (deadLetterBuilder .build ());
111- }
97+ if (consumerProperties .getDeadLetterPolicyMaxRedeliverCount () >= 0 ) {
98+ deadLetterBuilder =
99+ DeadLetterPolicy .builder ().maxRedeliverCount (consumerProperties .getDeadLetterPolicyMaxRedeliverCount ());
100+ }
112101
113- return clientBuilder .subscribe ();
114- } catch (PulsarClientException e ) {
115- throw new ConsumerInitException ("Failed to init consumer." , e );
102+ if (holder .getAnnotation ().maxRedeliverCount () >= 0 ) {
103+ deadLetterBuilder =
104+ DeadLetterPolicy .builder ().maxRedeliverCount (holder .getAnnotation ().maxRedeliverCount ());
105+ }
106+
107+ if (deadLetterBuilder != null && !holder .getAnnotation ().deadLetterTopic ().isEmpty ()) {
108+ deadLetterBuilder .deadLetterTopic (topicUrlService .buildTopicUrl (holder .getAnnotation ().deadLetterTopic ()));
109+ }
110+
111+ if (deadLetterBuilder != null ) {
112+ consumerBuilder .deadLetterPolicy (deadLetterBuilder .build ());
116113 }
117114 }
118115
116+ public <T > PulsarMessage <T > wrapMessage (Message <T > message ) {
117+ final PulsarMessage <T > pulsarMessage = new PulsarMessage <T >();
118+
119+ pulsarMessage .setValue (message .getValue ());
120+ pulsarMessage .setMessageId (message .getMessageId ());
121+ pulsarMessage .setSequenceId (message .getSequenceId ());
122+ pulsarMessage .setProperties (message .getProperties ());
123+ pulsarMessage .setTopicName (message .getTopicName ());
124+ pulsarMessage .setKey (message .getKey ());
125+ pulsarMessage .setEventTime (message .getEventTime ());
126+ pulsarMessage .setPublishTime (message .getPublishTime ());
127+ pulsarMessage .setProducerName (message .getProducerName ());
128+
129+ return pulsarMessage ;
130+ }
131+
119132 public List <Consumer > getConsumers () {
120133 return consumers ;
121134 }
0 commit comments