Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
loyalty-service
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tulasi Naveen Nadella
loyalty-service
Commits
5fde3800
Commit
5fde3800
authored
Dec 27, 2022
by
Tulasi Naveen Nadella
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Integrated kafka susbscriber changes
parent
34afbb79
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
60 additions
and
0 deletions
+60
-0
pom.xml
pom.xml
+11
-0
LoyaltyController.java
...isum/abs/loyaltyService/controller/LoyaltyController.java
+49
-0
No files found.
pom.xml
View file @
5fde3800
...
@@ -26,6 +26,17 @@
...
@@ -26,6 +26,17 @@
<artifactId>
spring-boot-starter-webflux
</artifactId>
<artifactId>
spring-boot-starter-webflux
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
io.projectreactor.kafka
</groupId>
<artifactId>
reactor-kafka
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.kafka
</groupId>
<artifactId>
spring-kafka
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<artifactId>
spring-boot-starter-test
</artifactId>
...
...
src/main/java/com/nisum/abs/loyaltyService/controller/LoyaltyController.java
View file @
5fde3800
package
com
.
nisum
.
abs
.
loyaltyService
.
controller
;
package
com
.
nisum
.
abs
.
loyaltyService
.
controller
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.nisum.abs.loyaltyService.dto.LoyaltyDto
;
import
com.nisum.abs.loyaltyService.dto.LoyaltyDto
;
import
com.nisum.abs.loyaltyService.service.LoyaltyService
;
import
com.nisum.abs.loyaltyService.service.LoyaltyService
;
import
org.apache.kafka.clients.consumer.ConsumerConfig
;
import
org.apache.kafka.common.serialization.StringDeserializer
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.kafka.support.serializer.JsonDeserializer
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.publisher.Mono
;
import
reactor.kafka.receiver.ReceiverOptions
;
import
reactor.kafka.receiver.ReceiverRecord
;
import
reactor.kafka.receiver.internals.ConsumerFactory
;
import
reactor.kafka.receiver.internals.DefaultKafkaReceiver
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.UUID
;
@RestController
@RestController
@RequestMapping
(
"loyalty"
)
@RequestMapping
(
"loyalty"
)
public
class
LoyaltyController
{
public
class
LoyaltyController
{
private
static
final
String
LOYALTY_REWARDS_TOPIC
=
"loyalty-rewards-info"
;
@Autowired
@Autowired
private
LoyaltyService
loyaltyService
;
private
LoyaltyService
loyaltyService
;
...
@@ -46,4 +62,37 @@ public class LoyaltyController {
...
@@ -46,4 +62,37 @@ public class LoyaltyController {
}
}
@GetMapping
(
value
=
"/loyaltyRewards"
,
produces
=
MediaType
.
TEXT_EVENT_STREAM_VALUE
)
public
Flux
<
JsonNode
>
getOrdersEventsFlux
(
@RequestParam
(
name
=
"loyaltyId"
)
String
loyaltyId
){
Map
<
String
,
Object
>
propsMaps
=
this
.
kafkaReceiverConfigurations
(
loyaltyId
);
DefaultKafkaReceiver
<
String
,
JsonNode
>
kafkaReceiver
=
new
DefaultKafkaReceiver
(
ConsumerFactory
.
INSTANCE
,
ReceiverOptions
.
create
(
propsMaps
).
subscription
(
Collections
.
singleton
(
LOYALTY_REWARDS_TOPIC
)));
Flux
<
ReceiverRecord
<
String
,
JsonNode
>>
kafkaFlux
=
kafkaReceiver
.
receive
();
return
kafkaFlux
.
filter
(
receivedRecord
->
{
receivedRecord
.
receiverOffset
().
acknowledge
();
return
receivedRecord
.
value
().
get
(
"loyaltyId"
).
asText
().
equals
(
loyaltyId
);
})
.
map
(
ReceiverRecord:
:
value
).
log
();
}
private
Map
<
String
,
Object
>
kafkaReceiverConfigurations
(
String
id
){
Map
<
String
,
Object
>
props
=
new
HashMap
<>();
props
.
put
(
ConsumerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
props
.
put
(
ConsumerConfig
.
CLIENT_ID_CONFIG
,
"loyalty-consumer-"
+
id
+
"-"
+
UUID
.
randomUUID
());
props
.
put
(
ConsumerConfig
.
KEY_DESERIALIZER_CLASS_CONFIG
,
StringDeserializer
.
class
);
props
.
put
(
ConsumerConfig
.
VALUE_DESERIALIZER_CLASS_CONFIG
,
JsonDeserializer
.
class
);
props
.
put
(
ConsumerConfig
.
GROUP_ID_CONFIG
,
id
);
props
.
put
(
ConsumerConfig
.
AUTO_OFFSET_RESET_CONFIG
,
"latest"
);
props
.
put
(
ConsumerConfig
.
ENABLE_AUTO_COMMIT_CONFIG
,
true
);
props
.
put
(
JsonDeserializer
.
TRUSTED_PACKAGES
,
"*"
);
return
props
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment