diff --git a/hr-microservice-hexagonal/pom.xml b/hr-microservice-hexagonal/pom.xml index c6ecaa4..a718486 100644 --- a/hr-microservice-hexagonal/pom.xml +++ b/hr-microservice-hexagonal/pom.xml @@ -85,6 +85,24 @@ org.springframework.boot spring-boot-starter-data-mongodb + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.amqp + spring-rabbit-test + test + + + org.springframework.kafka + spring-kafka + + + org.springframework.kafka + spring-kafka-test + test + diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/HrMicroserviceHexagonalApplication.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/HrMicroserviceHexagonalApplication.java index b75bcff..f3e0367 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/HrMicroserviceHexagonalApplication.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/HrMicroserviceHexagonalApplication.java @@ -1,6 +1,7 @@ package com.example.hr; import java.util.List; +import java.util.stream.IntStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; @@ -9,10 +10,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import com.example.hr.adapter.EmployeeRepositoryMongoAdapter; +import com.example.hr.adapter.EventPublisherKafkaAdapter; import com.example.hr.document.EmployeeDocument; -import com.example.hr.domain.Department; -import com.example.hr.domain.Employee; -import com.example.hr.domain.MoneyCurrency; +import com.example.hr.events.BusinessEvent; import com.example.hr.repository.EmployeeMongoRepository; /** @@ -20,29 +20,37 @@ * @author Binnur Kurt * */ +@SuppressWarnings("unused") @SpringBootApplication public class HrMicroserviceHexagonalApplication implements ApplicationRunner { - @Autowired private EmployeeRepositoryMongoAdapter mongoAdapter; - @Autowired private EmployeeMongoRepository mongoRepo; - + @Autowired + private EmployeeRepositoryMongoAdapter mongoAdapter; + @Autowired + private EmployeeMongoRepository mongoRepo; + @Autowired + private EventPublisherKafkaAdapter kafkaAdapter; + public static void main(String[] args) { SpringApplication.run(HrMicroserviceHexagonalApplication.class, args); } @Override public void run(ApplicationArguments args) throws Exception { - /* - Employee jack = new Employee.Builder("40310900232").fullname("jack", "bauer").birthYear(1956) - .salary(100_000, MoneyCurrency.USD).iban("TR820006235455781668847562").fulltime(true) - .department(Department.IT) - .photo("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" - .getBytes()) - .build(); - mongoAdapter.save(jack); - */ - List employees = mongoRepo.findAllByBirthYearBetweenAndDepartment(1950, 1960,Department.IT); + +// Employee jack = new Employee.Builder("40310900232").fullname("jack", "bauer").birthYear(1956) +// .salary(100_000, MoneyCurrency.USD).iban("TR820006235455781668847562").fulltime(true) +// .department(Department.IT) +// .photo("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" +// .getBytes()) +// .build(); +// mongoAdapter.save(jack); +// List employees = mongoRepo.findAllByBirthYearBetweenAndDepartment(1950, 1960, Department.IT); + List employees = mongoRepo.araBul(1950, 1960); System.err.println(employees); employees.forEach(System.out::println); + + IntStream.range(100, 200).forEach( + i -> kafkaAdapter.publishEvent(new BusinessEvent(Integer.toString(i), "employees", "test data"))); } } diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryMongoAdapter.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryMongoAdapter.java index 1c6addb..30f4ead 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryMongoAdapter.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryMongoAdapter.java @@ -15,6 +15,11 @@ import com.example.hr.repository.EmployeeMongoRepository; import com.example.hr.repository.EmployeeRepository; +/** + * + * @author Binnur Kurt + * + */ @Repository @Persistence(PersistenceTarget.MONGO) public class EmployeeRepositoryMongoAdapter implements EmployeeRepository{ diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPublisherKafkaAdapter.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPublisherKafkaAdapter.java new file mode 100644 index 0000000..ad52fe1 --- /dev/null +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPublisherKafkaAdapter.java @@ -0,0 +1,25 @@ +package com.example.hr.adapter; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Service; + +import com.example.hr.events.BusinessEvent; +import com.example.hr.infrastructure.EventPushlisher; + +/** + * + * @author Binnur Kurt + * + */ +@Service +public class EventPublisherKafkaAdapter implements EventPushlisher { + @Autowired + private KafkaTemplate kafkaTemplate; + + @Override + public void publishEvent(BusinessEvent event) { + kafkaTemplate.send("employees", event); + } + +} diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPublisherRabbitAdapter.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPublisherRabbitAdapter.java new file mode 100644 index 0000000..2f5fcb4 --- /dev/null +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPublisherRabbitAdapter.java @@ -0,0 +1,35 @@ +package com.example.hr.adapter; + +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; + +import com.example.hr.events.BusinessEvent; +import com.example.hr.infrastructure.EventPushlisher; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * + * @author Binnur Kurt + * + */ +//@Service +public class EventPublisherRabbitAdapter implements EventPushlisher { + + @Autowired + private RabbitTemplate rabbitTemplate; + @Autowired + private ObjectMapper mapper; + + @Override + public void publishEvent(BusinessEvent event) { + String payload; + try { + payload = mapper.writeValueAsString(event); + rabbitTemplate.convertAndSend("employeex", null, payload); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException(e.getMessage()); + } + } + +} diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherWebsocketAdapter.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherWebsocketAdapter.java index 7d4b584..5b05a2f 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherWebsocketAdapter.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherWebsocketAdapter.java @@ -2,7 +2,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.stereotype.Service; import com.example.hr.events.BusinessEvent; import com.example.hr.infrastructure.EventPushlisher; @@ -12,10 +11,11 @@ * @author Binnur Kurt * */ -@Service +//@Service public class EventPuslisherWebsocketAdapter implements EventPushlisher { - @Autowired private SimpMessagingTemplate messagingTemplate; - + @Autowired + private SimpMessagingTemplate messagingTemplate; + @Override public void publishEvent(BusinessEvent event) { messagingTemplate.convertAndSend("changes", event); diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/config/WebsocketConfig.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/config/WebsocketConfig.java index 9c2bde4..7be4c00 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/config/WebsocketConfig.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/config/WebsocketConfig.java @@ -6,6 +6,11 @@ import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +/** + * + * @author Binnur Kurt + * + */ @Configuration @EnableWebSocketMessageBroker public class WebsocketConfig implements WebSocketMessageBrokerConfigurer { diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/document/EmployeeDocument.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/document/EmployeeDocument.java index 3b76381..8d6e04f 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/document/EmployeeDocument.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/document/EmployeeDocument.java @@ -6,12 +6,19 @@ import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; import com.example.hr.domain.Department; import com.example.validation.Iban; import com.example.validation.TcKimlikNo; +/** + * + * @author Binnur Kurt + * + */ @Document(collection = "employees") +@Sharded(shardKey = "identity", immutableKey = true) public class EmployeeDocument { @TcKimlikNo @Id diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/Persistence.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/Persistence.java index 7271aa8..7ee6a38 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/Persistence.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/Persistence.java @@ -7,6 +7,11 @@ import org.springframework.beans.factory.annotation.Qualifier; +/** + * + * @author Binnur Kurt + * + */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.PARAMETER, ElementType.FIELD}) @Qualifier diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/PersistenceTarget.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/PersistenceTarget.java index 693bc4e..4860a06 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/PersistenceTarget.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/meta/PersistenceTarget.java @@ -1,5 +1,10 @@ package com.example.hr.meta; +/** + * + * @author Binnur Kurt + * + */ public enum PersistenceTarget { JPA_MYSQL, MONGO, CASSANDRA, REDIS, ELASTIC_SEARCH } diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeMongoRepository.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeMongoRepository.java index bf7c56a..f327f5a 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeMongoRepository.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeMongoRepository.java @@ -8,9 +8,14 @@ import com.example.hr.document.EmployeeDocument; import com.example.hr.domain.Department; +/** + * + * @author Binnur Kurt + * + */ public interface EmployeeMongoRepository extends MongoRepository{ List findAllByBirthYearBetweenAndDepartment(int fromYear,int toYear,Department department); - @Query(value = "{'birthYear': {'$gt': 'fromYear', '$lt': 'toYear'}}") + @Query(value = "{'birthYear': {'$gt': ?0, '$lt': ?1}}") List araBul(int fromYear,int toYear); } diff --git a/hr-microservice-hexagonal/src/main/resources/application.properties b/hr-microservice-hexagonal/src/main/resources/application.properties index 1ae4cb9..452dec7 100644 --- a/hr-microservice-hexagonal/src/main/resources/application.properties +++ b/hr-microservice-hexagonal/src/main/resources/application.properties @@ -26,4 +26,18 @@ spring.jpa.show-sql=true #mongodb configuration -spring.data.mongodb.uri=mongodb://localhost:27017/hr \ No newline at end of file +spring.data.mongodb.uri=mongodb://localhost:27017/hr + +# rabbitmq configuration +spring.rabbitmq.host=localhost +spring.rabbitmq.username=demoadmin +spring.rabbitmq.password=secret123 + +# kafka configuration +spring.kafka.consumer.group-id=hr +spring.kafka.consumer.auto-offset-reset=earliest +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer +spring.kafka.consumer.properties.spring.json.trusted.packages=* \ No newline at end of file diff --git a/identity-card-microservice/pom.xml b/identity-card-microservice/pom.xml new file mode 100644 index 0000000..b988b25 --- /dev/null +++ b/identity-card-microservice/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.1.RELEASE + + + com.example + identity-card-microservice + 0.0.1-SNAPSHOT + identity-card-microservice + Spring Boot Project for Identity Card Service + + + 11 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.springframework.amqp + spring-rabbit-test + test + + + org.springframework.kafka + spring-kafka + + + org.springframework.kafka + spring-kafka-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/identity-card-microservice/src/main/java/com/example/hr/events/BusinessEvent.java b/identity-card-microservice/src/main/java/com/example/hr/events/BusinessEvent.java new file mode 100644 index 0000000..4babe7a --- /dev/null +++ b/identity-card-microservice/src/main/java/com/example/hr/events/BusinessEvent.java @@ -0,0 +1,51 @@ +package com.example.hr.events; + +/** + * + * @author Binnur Kurt + * + */ +public class BusinessEvent { + private String eventId; + private String topic; + private Object data; + + public BusinessEvent() { + } + + public BusinessEvent(String eventId, String topic, Object data) { + this.eventId = eventId; + this.topic = topic; + this.data = data; + } + + public String getEventId() { + return eventId; + } + + public String getTopic() { + return topic; + } + + public Object getData() { + return data; + } + + public void setEventId(String eventId) { + this.eventId = eventId; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public void setData(Object data) { + this.data = data; + } + + @Override + public String toString() { + return "BusinessEvent [eventId=" + eventId + ", topic=" + topic + ", data=" + data + "]"; + } + +} diff --git a/identity-card-microservice/src/main/java/com/example/hr/events/EmployeeFiredEvent.java b/identity-card-microservice/src/main/java/com/example/hr/events/EmployeeFiredEvent.java new file mode 100644 index 0000000..d7465bf --- /dev/null +++ b/identity-card-microservice/src/main/java/com/example/hr/events/EmployeeFiredEvent.java @@ -0,0 +1,14 @@ +package com.example.hr.events; + +/** + * + * @author Binnur Kurt + * + */ +public class EmployeeFiredEvent extends BusinessEvent { + + public EmployeeFiredEvent(String eventId, String topic, Object data) { + super(eventId, topic, data); + } + +} diff --git a/identity-card-microservice/src/main/java/com/example/hr/events/EmployeeHiredEvent.java b/identity-card-microservice/src/main/java/com/example/hr/events/EmployeeHiredEvent.java new file mode 100644 index 0000000..627acab --- /dev/null +++ b/identity-card-microservice/src/main/java/com/example/hr/events/EmployeeHiredEvent.java @@ -0,0 +1,14 @@ +package com.example.hr.events; + +/** + * + * @author Binnur Kurt + * + */ +public class EmployeeHiredEvent extends BusinessEvent { + + public EmployeeHiredEvent(String eventId, String topic, Object data) { + super(eventId, topic, data); + } + +} diff --git a/identity-card-microservice/src/main/java/com/example/icard/service/CardService.java b/identity-card-microservice/src/main/java/com/example/icard/service/CardService.java new file mode 100644 index 0000000..0c15bc6 --- /dev/null +++ b/identity-card-microservice/src/main/java/com/example/icard/service/CardService.java @@ -0,0 +1,24 @@ +package com.example.icard.service; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Service; + +import com.example.hr.events.BusinessEvent; + +@Service +public class CardService { + + @RabbitListener(queues = "employees") + public void listen(@Payload String payload) { + // payload is encoded as JSON + System.err.println(payload); + } + + @KafkaListener(topics = "employees") + public void listenKafka(BusinessEvent event) { + System.err.println(event); + } + +} diff --git a/identity-card-microservice/src/main/resources/application.properties b/identity-card-microservice/src/main/resources/application.properties new file mode 100644 index 0000000..dbfd053 --- /dev/null +++ b/identity-card-microservice/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.main.banner-mode=off +server.address=localhost +server.port=7500 + +# rabbitmq configuration +spring.rabbitmq.host=localhost +spring.rabbitmq.username=demoadmin +spring.rabbitmq.password=secret123 + +# kafka configuration +spring.kafka.consumer.group-id=hr +spring.kafka.consumer.auto-offset-reset=earliest +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer +spring.kafka.consumer.properties.spring.json.trusted.packages=* \ No newline at end of file