Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
order-management-webflux-mongodb
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
Sarika Sama
order-management-webflux-mongodb
Commits
e70dd459
Commit
e70dd459
authored
Jul 05, 2023
by
Sarika Sama
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
integrating kafka
parent
940b786c
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
75 additions
and
7 deletions
+75
-7
KafkaConsumerConfig.java
...luxmongodbordermanagement/config/KafkaConsumerConfig.java
+1
-0
KafkaListeners.java
.../webfluxmongodbordermanagement/config/KafkaListeners.java
+1
-0
KafkaProducer.java
...m/webfluxmongodbordermanagement/config/KafkaProducer.java
+1
-0
KafkaProducerConfig.java
...luxmongodbordermanagement/config/KafkaProducerConfig.java
+1
-0
UserController.java
...fluxmongodbordermanagement/controller/UserController.java
+3
-2
UserOrdersController.java
...ngodbordermanagement/controller/UserOrdersController.java
+29
-1
OrdersService.java
.../webfluxmongodbordermanagement/service/OrdersService.java
+1
-0
UserOrdersService.java
...fluxmongodbordermanagement/service/UserOrdersService.java
+1
-1
UserService.java
...um/webfluxmongodbordermanagement/service/UserService.java
+36
-3
application.properties
src/main/resources/application.properties
+1
-0
No files found.
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaConsumerConfig.java
View file @
e70dd459
...
@@ -22,6 +22,7 @@ public class KafkaConsumerConfig {
...
@@ -22,6 +22,7 @@ public class KafkaConsumerConfig {
@Bean
@Bean
public
ConsumerFactory
<
String
,
String
>
consumerFatory
()
{
public
ConsumerFactory
<
String
,
String
>
consumerFatory
()
{
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
config
.
put
(
ConsumerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
config
.
put
(
ConsumerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
config
.
put
(
ConsumerConfig
.
KEY_DESERIALIZER_CLASS_CONFIG
,
StringDeserializer
.
class
);
config
.
put
(
ConsumerConfig
.
KEY_DESERIALIZER_CLASS_CONFIG
,
StringDeserializer
.
class
);
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaListeners.java
View file @
e70dd459
...
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
...
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
@Component
@Component
@Slf4j
@Slf4j
public
class
KafkaListeners
{
public
class
KafkaListeners
{
@Value
(
"${order_topic}"
)
@Value
(
"${order_topic}"
)
private
String
topicName
;
private
String
topicName
;
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaProducer.java
View file @
e70dd459
...
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
...
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
@Component
@Component
@Slf4j
@Slf4j
public
class
KafkaProducer
{
public
class
KafkaProducer
{
private
final
KafkaTemplate
<
String
,
String
>
kafkaTemplate
;
private
final
KafkaTemplate
<
String
,
String
>
kafkaTemplate
;
@Autowired
@Autowired
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaProducerConfig.java
View file @
e70dd459
...
@@ -18,6 +18,7 @@ public class KafkaProducerConfig {
...
@@ -18,6 +18,7 @@ public class KafkaProducerConfig {
@Bean
@Bean
ProducerFactory
<
String
,
String
>
producerFactory
()
{
ProducerFactory
<
String
,
String
>
producerFactory
()
{
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
config
.
put
(
ProducerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
config
.
put
(
ProducerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
config
.
put
(
ProducerConfig
.
KEY_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
);
config
.
put
(
ProducerConfig
.
KEY_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
);
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/controller/UserController.java
View file @
e70dd459
...
@@ -17,9 +17,10 @@ public class UserController {
...
@@ -17,9 +17,10 @@ public class UserController {
@Autowired
@Autowired
UserService
userService
;
UserService
userService
;
@GetMapping
(
"/users"
)
@GetMapping
(
"/
publish-
users"
)
public
Flux
<
User
>
getUsers
()
{
public
Flux
<
User
>
getUsers
()
{
return
userService
.
getUsers
();
Flux
<
User
>
user
=
userService
.
fetchUsersAndPublish
();
return
user
;
}
}
}
}
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/controller/UserOrdersController.java
View file @
e70dd459
package
com
.
nisum
.
webfluxmongodbordermanagement
.
controller
;
package
com
.
nisum
.
webfluxmongodbordermanagement
.
controller
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.entity.UserOrders
;
import
com.nisum.webfluxmongodbordermanagement.entity.UserOrders
;
import
com.nisum.webfluxmongodbordermanagement.service.UserOrdersService
;
import
com.nisum.webfluxmongodbordermanagement.service.UserOrdersService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.scheduler.Schedulers
;
import
java.util.List
;
@RestController
@RestController
@Slf4j
public
class
UserOrdersController
{
public
class
UserOrdersController
{
@Autowired
@Autowired
private
UserOrdersService
userOrdersService
;
private
UserOrdersService
userOrdersService
;
@Autowired
private
KafkaProducer
kafkaProducer
;
@Value
(
"${order_topic}"
)
private
String
topicName
;
@GetMapping
(
"/user-orders"
)
@GetMapping
(
"/user-orders"
)
public
Flux
<
UserOrders
>
getAllUsersWithOrders
(){
public
Flux
<
UserOrders
>
fetchUserOrdersAndPublish
(){
Flux
<
UserOrders
>
userOrdersFlux
=
userOrdersService
.
getAllUsersWithOrders
();
Flux
<
UserOrders
>
userOrdersFlux
=
userOrdersService
.
getAllUsersWithOrders
();
Mono
<
List
<
UserOrders
>>
usersMono
=
userOrdersFlux
.
collectList
()
.
subscribeOn
(
Schedulers
.
boundedElastic
());
usersMono
.
subscribe
(
resultList
->
{
log
.
info
(
"sending userOrders to kafka"
);
for
(
UserOrders
user
:
resultList
)
{
kafkaProducer
.
sendMessage
(
topicName
,
"userOrders-"
+
user
.
getUserId
(),
user
.
toString
());
}
},
throwable
->
log
.
error
(
"Error occurred: {}"
,
throwable
.
getMessage
())
);
return
userOrdersFlux
;
return
userOrdersFlux
;
}
}
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/service/OrdersService.java
View file @
e70dd459
...
@@ -28,6 +28,7 @@ public class OrdersService {
...
@@ -28,6 +28,7 @@ public class OrdersService {
private
String
topicName
;
private
String
topicName
;
public
Flux
<
Order
>
fetchOrdersAndPublish
(){
public
Flux
<
Order
>
fetchOrdersAndPublish
(){
Flux
<
Order
>
orders
=
orderRepository
.
findAll
();
Flux
<
Order
>
orders
=
orderRepository
.
findAll
();
Mono
<
List
<
Order
>>
ordersMono
=
orders
.
collectList
()
Mono
<
List
<
Order
>>
ordersMono
=
orders
.
collectList
()
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/service/UserOrdersService.java
View file @
e70dd459
...
@@ -18,12 +18,12 @@ public class UserOrdersService {
...
@@ -18,12 +18,12 @@ public class UserOrdersService {
ReactiveMongoTemplate
reactiveMongoTemplate
;
ReactiveMongoTemplate
reactiveMongoTemplate
;
public
Flux
<
UserOrders
>
getAllUsersWithOrders
()
{
public
Flux
<
UserOrders
>
getAllUsersWithOrders
()
{
LookupOperation
lookupOperation
=
LookupOperation
.
newLookup
().
LookupOperation
lookupOperation
=
LookupOperation
.
newLookup
().
from
(
"orders"
).
from
(
"orders"
).
localField
(
"userId"
).
localField
(
"userId"
).
foreignField
(
"userId"
).
foreignField
(
"userId"
).
as
(
"order"
);
as
(
"order"
);
Aggregation
aggregation
=
Aggregation
.
newAggregation
(
lookupOperation
);
Aggregation
aggregation
=
Aggregation
.
newAggregation
(
lookupOperation
);
return
reactiveMongoTemplate
.
aggregate
(
aggregation
,
"user"
,
UserOrders
.
class
);
return
reactiveMongoTemplate
.
aggregate
(
aggregation
,
"user"
,
UserOrders
.
class
);
}
}
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/service/UserService.java
View file @
e70dd459
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.repository.UserRepository
;
import
com.nisum.webfluxmongodbordermanagement.repository.UserRepository
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.scheduler.Schedulers
;
import
java.util.List
;
@Service
@Service
@Slf4j
public
class
UserService
{
public
class
UserService
{
@Autowired
@Autowired
private
UserRepository
userRepository
;
private
UserRepository
userRepository
;
public
Flux
<
User
>
getUsers
(){
// public Flux<User> getUsers(){
return
userRepository
.
findAll
();
//
}
// return userRepository.findAll();
// }
@Autowired
private
KafkaProducer
kafkaProducer
;
@Value
(
"${order_topic}"
)
private
String
topicName
;
public
Flux
<
User
>
fetchUsersAndPublish
(){
Flux
<
User
>
users
=
userRepository
.
findAll
();
Mono
<
List
<
User
>>
usersMono
=
users
.
collectList
()
.
subscribeOn
(
Schedulers
.
boundedElastic
());
usersMono
.
subscribe
(
resultList
->
{
log
.
info
(
"sending users to kafka"
);
for
(
User
user
:
resultList
)
{
kafkaProducer
.
sendMessage
(
topicName
,
"user-"
+
user
.
getUserId
(),
user
.
toString
());
}
},
throwable
->
log
.
error
(
"Error occurred: {}"
,
throwable
.
getMessage
())
);
return
users
;
}
}
}
\ No newline at end of file
src/main/resources/application.properties
View file @
e70dd459
server.port
=
9090
server.port
=
9090
spring.data.mongodb.host
=
localhost
spring.data.mongodb.host
=
localhost
spring.data.mongodb.port
=
27017
spring.data.mongodb.port
=
27017
spring.data.mongodb.database
=
user-orders-db
spring.data.mongodb.database
=
user-orders-db
order_topic
=
order_topic
order_topic
=
order_topic
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