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