Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
spring-boot-kafka-producer
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
Uday Singh
spring-boot-kafka-producer
Commits
7bd58b51
Commit
7bd58b51
authored
May 06, 2020
by
uday
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
used the library for Apache kafka and change the code accordinglly
parent
fde0dbec
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
68 additions
and
261 deletions
+68
-261
ProducerConfiguration.java
...sdataproducer/appconfiguration/ProducerConfiguration.java
+16
-24
OffersDataProducer.java
...y/epe/offersdataproducer/producer/OffersDataProducer.java
+15
-9
OffersDataProducerResource.java
...fersdataproducer/resource/OffersDataProducerResource.java
+5
-4
OffersDataProducerService.java
...offersdataproducer/service/OffersDataProducerService.java
+3
-3
OffersDataProducerServiceImpl.java
...aproducer/service/impl/OffersDataProducerServiceImpl.java
+11
-5
OffersDataDTO.json
...afeway/epe/offersdataproducer/resource/OffersDataDTO.json
+1
-56
OffersDataProducerResourceComponentTest.java
...cer/resource/OffersDataProducerResourceComponentTest.java
+17
-74
OffersDataProducerResourceTest.java
...dataproducer/resource/OffersDataProducerResourceTest.java
+0
-86
No files found.
src/main/java/com/safeway/epe/offersdataproducer/appconfiguration/ProducerConfiguration.java
View file @
7bd58b51
...
...
@@ -4,32 +4,24 @@ import org.apache.kafka.clients.producer.ProducerConfig;
import
org.apache.kafka.common.serialization.StringSerializer
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.kafka.core.DefaultKafkaProducerFactory
;
import
org.springframework.kafka.core.KafkaTemplate
;
import
org.springframework.kafka.core.ProducerFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Properties
;
@Co
nfiguration
@Co
mponent
public
class
ProducerConfiguration
{
public
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ProducerConfiguration
.
class
);
@Bean
public
ProducerFactory
<
String
,
String
>
producerFactory
()
{
logger
.
info
(
"Setting producer configuration "
);
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
config
.
put
(
ProducerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
AppConfigs
.
BOOTSTRAP_SERVER
);
config
.
put
(
ProducerConfig
.
KEY_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
);
config
.
put
(
ProducerConfig
.
VALUE_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
);
return
new
DefaultKafkaProducerFactory
<>(
config
);
}
@Bean
@Qualifier
(
"kafkaTemplate"
)
public
KafkaTemplate
<
String
,
String
>
kafkaTemplate
()
{
return
new
KafkaTemplate
<>(
producerFactory
());
public
Properties
configuration
(){
Properties
properties
=
new
Properties
();
properties
.
setProperty
(
ProducerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
AppConfigs
.
BOOTSTRAP_SERVER
);
properties
.
setProperty
(
ProducerConfig
.
VALUE_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
.
getName
());
properties
.
setProperty
(
ProducerConfig
.
KEY_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
.
getName
());
return
properties
;
}
}
}
src/main/java/com/safeway/epe/offersdataproducer/producer/OffersDataProducer.java
View file @
7bd58b51
...
...
@@ -3,27 +3,33 @@ package com.safeway.epe.offersdataproducer.producer;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.safeway.epe.offersdataproducer.appconfiguration.AppConfigs
;
import
com.safeway.epe.offersdataproducer.appconfiguration.ProducerConfiguration
;
import
com.safeway.epe.offersdataproducer.dtomodel.OffersDataDTO
;
import
org.apache.kafka.clients.producer.KafkaProducer
;
import
org.apache.kafka.clients.producer.ProducerRecord
;
import
org.apache.kafka.clients.producer.RecordMetadata
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.kafka.core.KafkaTemplate
;
import
org.springframework.kafka.support.SendResult
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.concurrent.ListenableFuture
;
import
java.util.concurrent.Future
;
@Component
public
class
OffersDataProducer
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
OffersDataProducer
.
class
);
@Autowired
private
KafkaTemplate
<
String
,
String
>
kafkaTemplate
;
private
ProducerConfiguration
producerConfiguration
;
@Autowired
private
ObjectMapper
objectMapper
;
public
ListenableFuture
<
SendResult
<
String
,
String
>>
sendMessage
(
OffersDataDTO
offersDataDTO
)
throws
JsonProcessingException
{
logger
.
info
(
"Start :: OffersDataProducer.sendMessage"
);
public
Future
sendEvent
(
OffersDataDTO
offersDataDTO
)
throws
JsonProcessingException
{
logger
.
info
(
"Start :: OffersDataProducer.sendEvent"
);
String
offersDataDTOResp
=
objectMapper
.
writeValueAsString
(
offersDataDTO
);
ListenableFuture
<
SendResult
<
String
,
String
>>
message
=
kafkaTemplate
.
send
(
AppConfigs
.
TOPIC_NAME
,
offersDataDTOResp
);
logger
.
info
(
"End :: OffersDataProducer.sendMessage"
);
return
message
;
KafkaProducer
producer
=
new
KafkaProducer
(
producerConfiguration
.
configuration
());
ProducerRecord
record
=
new
ProducerRecord
(
AppConfigs
.
TOPIC_NAME
,
offersDataDTOResp
);
Future
<
RecordMetadata
>
future
=
producer
.
send
(
record
);
logger
.
info
(
"End :: OffersDataProducer.sendEvent"
);
return
future
;
}
}
src/main/java/com/safeway/epe/offersdataproducer/resource/OffersDataProducerResource.java
View file @
7bd58b51
...
...
@@ -4,13 +4,14 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import
com.safeway.epe.offersdataproducer.appconfiguration.AppConfigs
;
import
com.safeway.epe.offersdataproducer.domodel.OffersDataDO
;
import
com.safeway.epe.offersdataproducer.service.OffersDataProducerService
;
import
org.apache.kafka.clients.producer.RecordMetadata
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.kafka.support.SendResult
;
import
org.springframework.util.concurrent.ListenableFuture
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.concurrent.Future
;
@RestController
@RequestMapping
(
AppConfigs
.
CLASS_LEVEL_PRODUCER_URL
)
public
class
OffersDataProducerResource
{
...
...
@@ -18,8 +19,8 @@ public class OffersDataProducerResource {
private
OffersDataProducerService
offersDataProducerService
;
@PostMapping
(
AppConfigs
.
CLASS_LEVEL_PRODUCER_URL
)
@ResponseStatus
(
HttpStatus
.
CREATED
)
public
ResponseEntity
<
ListenableFuture
<
SendResult
<
String
,
String
>
>>
publishOfferEvent
(
@RequestBody
OffersDataDO
offersDataDO
)
throws
JsonProcessingException
{
ListenableFuture
<
SendResult
<
String
,
String
>
>
offerEventStatus
=
offersDataProducerService
.
publishOfferEvent
(
offersDataDO
);
public
ResponseEntity
<
Future
<
RecordMetadata
>>
publishOfferEvent
(
@RequestBody
OffersDataDO
offersDataDO
)
throws
JsonProcessingException
{
Future
<
RecordMetadata
>
offerEventStatus
=
offersDataProducerService
.
publishOfferEvent
(
offersDataDO
);
return
ResponseEntity
.
status
(
HttpStatus
.
CREATED
).
body
(
offerEventStatus
);
}
}
src/main/java/com/safeway/epe/offersdataproducer/service/OffersDataProducerService.java
View file @
7bd58b51
...
...
@@ -2,9 +2,9 @@ package com.safeway.epe.offersdataproducer.service;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.safeway.epe.offersdataproducer.domodel.OffersDataDO
;
import
org.springframework.kafka.support.SendResult
;
import
org.springframework.util.concurrent.Listenable
Future
;
import
java.util.concurrent.
Future
;
public
interface
OffersDataProducerService
{
ListenableFuture
<
SendResult
<
String
,
String
>>
publishOfferEvent
(
OffersDataDO
offersDataDO
)
throws
JsonProcessingException
;
public
Future
publishOfferEvent
(
OffersDataDO
offersDataDO
)
throws
JsonProcessingException
;
}
src/main/java/com/safeway/epe/offersdataproducer/service/impl/OffersDataProducerServiceImpl.java
View file @
7bd58b51
...
...
@@ -8,13 +8,17 @@ import com.safeway.epe.offersdataproducer.producer.OffersDataProducer;
import
com.safeway.epe.offersdataproducer.service.OffersDataProducerService
;
import
com.safeway.epe.offersdataproducer.transformer.OffersDataBoToDTO
;
import
com.safeway.epe.offersdataproducer.transformer.OffersDataDoToBo
;
import
org.apache.kafka.clients.producer.RecordMetadata
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.kafka.support.SendResult
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.concurrent.ListenableFuture
;
import
java.util.concurrent.Future
;
@Service
public
class
OffersDataProducerServiceImpl
implements
OffersDataProducerService
{
public
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
OffersDataProducerServiceImpl
.
class
);
@Autowired
private
OffersDataBoToDTO
offersDataBoToDTO
;
@Autowired
...
...
@@ -22,10 +26,12 @@ public class OffersDataProducerServiceImpl implements OffersDataProducerService
@Autowired
private
OffersDataProducer
offersDataProducer
;
@Override
public
ListenableFuture
<
SendResult
<
String
,
String
>>
publishOfferEvent
(
OffersDataDO
offersDataDO
)
throws
JsonProcessingException
{
public
Future
publishOfferEvent
(
OffersDataDO
offersDataDO
)
throws
JsonProcessingException
{
logger
.
info
(
"Start :: OffersDataProducerServiceImpl.publishOfferEvent"
);
OffersDataBO
offersDataBO
=
offersDataDoToBo
.
transerToBo
(
offersDataDO
);
OffersDataDTO
offersDataDTO
=
offersDataBoToDTO
.
transferToDTO
(
offersDataBO
);
ListenableFuture
<
SendResult
<
String
,
String
>>
eventStatus
=
offersDataProducer
.
sendMessage
(
offersDataDTO
);
return
eventStatus
;
Future
<
RecordMetadata
>
future
=
offersDataProducer
.
sendEvent
(
offersDataDTO
);
logger
.
info
(
"End :: OffersDataProducerServiceImpl.publishOfferEvent"
);
return
future
;
}
}
src/test/java/com/safeway/epe/offersdataproducer/resource/OffersDataDTO.json
View file @
7bd58b51
{
"offerId"
:
135918555
,
"offersDTO"
:
[
{
"infoDTO"
:
{
"offerId"
:
135918555
,
"idDTO"
:
{
"offerId"
:
135918555
,
"manufacturerId"
:
"MMM"
},
"offerProgramCode"
:
"SC"
,
"terminalsDTO"
:
[
"Groceryworks (Safeway.com)"
,
"Smart Cart (QVS Virtual Terminals)"
,
"Bakery"
]
},
"rulesDTO"
:
{
"offerId"
:
135918555
,
"startDate"
:
"2019-07-27T07:00:00.000+00:00"
,
"endDate"
:
"2021-02-27T06:59:58.000+00:00"
,
"benefitDTO"
:
{
"benefitValueType"
:
"A"
,
"discountDTO"
:
[
{
"allowNegative"
:
false
,
"flexNegative"
:
false
,
"discountTierDTO"
:
[
{
"amount"
:
6.99
,
"upTo"
:
"3"
,
"itemLimit"
:
5
,
"weightLimit"
:
2
}
]
}
],
"pointsDTO"
:
[
{
"generalPoints"
:
5
,
"loyaltyPoints"
:
250
}
]
}
}
}
]
}
\ No newline at end of file
{
"offerId"
:
135918555
,
"offersDTO"
:
[
{
"infoDTO"
:
{
"offerId"
:
135918555
,
"idDTO"
:
{
"offerId"
:
135918555
,
"manufacturerId"
:
"MMM"
},
"offerProgramCode"
:
"SC"
,
"terminalsDTO"
:
[
"Groceryworks (Safeway.com)"
,
"Smart Cart (QVS Virtual Terminals)"
,
"Bakery"
]
},
"rulesDTO"
:
{
"offerId"
:
135918555
,
"startDate"
:
"2019-07-27T07:00:00.000+00:00"
,
"endDate"
:
"2021-02-27T06:59:58.000+00:00"
,
"benefitDTO"
:
{
"benefitValueType"
:
"A"
,
"discountDTO"
:
[
{
"allowNegative"
:
false
,
"flexNegative"
:
false
,
"discountTierDTO"
:
[
{
"amount"
:
6.99
,
"upTo"
:
"3"
,
"itemLimit"
:
5
,
"weightLimit"
:
2
}
]
}
],
"pointsDTO"
:
[
{
"generalPoints"
:
5
,
"loyaltyPoints"
:
250
}
]
}
}
}
]
}
\ No newline at end of file
src/test/java/com/safeway/epe/offersdataproducer/resource/OffersDataProducerResourceComponentTest.java
View file @
7bd58b51
This diff is collapsed.
Click to expand it.
src/test/java/com/safeway/epe/offersdataproducer/resource/OffersDataProducerResourceTest.java
deleted
100644 → 0
View file @
fde0dbec
package
com
.
safeway
.
epe
.
offersdataproducer
.
resource
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.common.collect.Lists
;
import
com.safeway.epe.offersdataproducer.appconfiguration.AppConfigs
;
import
com.safeway.epe.offersdataproducer.domodel.*
;
import
com.safeway.epe.offersdataproducer.service.OffersDataProducerService
;
import
org.apache.kafka.clients.producer.ProducerRecord
;
import
org.apache.kafka.clients.producer.RecordMetadata
;
import
org.apache.kafka.common.TopicPartition
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.Mockito
;
import
org.skyscreamer.jsonassert.JSONAssert
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.boot.test.web.client.TestRestTemplate
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.kafka.support.SendResult
;
import
org.springframework.test.context.ActiveProfiles
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
org.springframework.util.concurrent.ListenableFuture
;
import
org.springframework.util.concurrent.SettableListenableFuture
;
import
java.util.concurrent.ExecutionException
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
webEnvironment
=
SpringBootTest
.
WebEnvironment
.
RANDOM_PORT
)
// for restTemplate
@ActiveProfiles
(
"test"
)
public
class
OffersDataProducerResourceTest
{
@InjectMocks
private
OffersDataProducerResource
offersDataProducerResource
;
@Mock
private
OffersDataProducerService
offersDataProducerService
;
@Autowired
private
TestRestTemplate
testRestTemplate
;
@Test
public
void
publishOfferEventTest
()
throws
JsonProcessingException
,
ExecutionException
,
InterruptedException
{
OffersDataDO
offersDataDO
=
buildOffersDataDO
();
ObjectMapper
mapper
=
new
ObjectMapper
();
String
excpected
=
mapper
.
writeValueAsString
(
offersDataDO
);
SettableListenableFuture
future
=
new
SettableListenableFuture
();
ProducerRecord
<
Integer
,
String
>
producerRecord
=
new
ProducerRecord
(
AppConfigs
.
TOPIC_NAME
,
null
,
offersDataDO
);
RecordMetadata
recordMetadata
=
new
RecordMetadata
(
new
TopicPartition
(
AppConfigs
.
TOPIC_NAME
,
0
),
8
,
1
,
342
,
System
.
currentTimeMillis
(),
-
1
,
581
);
SendResult
<
Integer
,
String
>
sendResult
=
new
SendResult
<
Integer
,
String
>(
producerRecord
,
recordMetadata
);
future
.
set
(
sendResult
);
Mockito
.
when
(
offersDataProducerService
.
publishOfferEvent
(
Mockito
.
any
(
OffersDataDO
.
class
)))
.
thenReturn
(
future
);
ResponseEntity
<
ListenableFuture
<
SendResult
<
String
,
String
>>>
result
=
offersDataProducerResource
.
publishOfferEvent
(
offersDataDO
);
SendResult
<
String
,
String
>
sendResult1
=
result
.
getBody
().
get
();
assert
sendResult1
.
getRecordMetadata
().
partition
()
==
0
;
String
actual
=
mapper
.
writeValueAsString
(
result
.
getBody
().
get
().
getProducerRecord
().
value
());
JSONAssert
.
assertEquals
(
excpected
,
actual
,
false
);
}
private
OffersDataDO
buildOffersDataDO
()
{
DiscountTierDO
discountTierDO
=
DiscountTierDO
.
builder
().
amount
(
6.99f
).
upTo
(
"3"
)
.
itemLimit
(
5
).
weightLimit
(
2
).
build
();
PointsDO
pointsDO
=
PointsDO
.
builder
().
generalPoints
(
5
).
loyaltyPoints
(
250
).
build
();
DiscountDO
discountDO
=
DiscountDO
.
builder
().
discountTierDO
(
Lists
.
newArrayList
(
discountTierDO
))
.
allowNegative
(
false
).
flexNegative
(
false
).
build
();
BenefitDO
benefitDO
=
BenefitDO
.
builder
().
discountDO
(
Lists
.
newArrayList
(
discountDO
))
.
pointsDO
(
Lists
.
newArrayList
(
pointsDO
)).
benefitValueType
(
"A"
)
.
build
();
IdDO
idDO
=
IdDO
.
builder
().
manufacturerId
(
"MMM"
).
offerId
(
135918444
).
build
();
InfoDO
infoDO
=
InfoDO
.
builder
().
offerId
(
135918444
).
idDO
(
idDO
).
offerProgramCode
(
"SC"
)
.
terminalsDO
(
Lists
.
newArrayList
(
"Groceryworks (Safeway.com)"
,
"Smart Cart (QVS Virtual Terminals)"
,
"Bakery"
)).
build
();
RulesDO
rulesDO
=
RulesDO
.
builder
().
offerId
(
135918444
).
benefitDO
(
benefitDO
).
endDate
(
"2021-02-27T06:59:58.000+00:00"
)
.
startDate
(
"2019-07-27T07:00:00.000+00:00"
).
build
();
OffersDO
offersDO
=
OffersDO
.
builder
().
infoDO
(
infoDO
).
rulesDO
(
rulesDO
).
build
();
OffersDataDO
offersDataDO
=
OffersDataDO
.
builder
().
offerId
(
135918444
).
offersDO
(
Lists
.
newArrayList
(
offersDO
)).
build
();
return
offersDataDO
;
}
}
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