commit 88aee3ff5c9781f6312684744bcd940e15de358f Author: Nathan Wagner Date: Mon May 5 12:27:20 2025 +0000 bad java doing bad things diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..6f955d9 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/java +{ + "name": "Java", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/java:1-21-bullseye", + + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "none", + "installMaven": "false", + "installGradle": "true" + }, + "ghcr.io/devcontainers/features/docker-in-docker:2": {} + }, + "mounts": [ + "source=${localEnv:HOME}${localEnv:USERPROFILE},target=/host-home-folder,type=bind,consistency=cached", +] + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "java -version", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..275aa33 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'org.springframework.boot' version '3.0.4' + id 'io.spring.dependency-management' version '1.1.0' + id 'java' +} + +group = 'com.example.kafkaapp' +version = '0.0.1-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.kafka:spring-kafka' + testImplementation('org.springframework.boot:spring-boot-starter-test') { + exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' + } +} + +tasks.named('bootRun') { + doFirst { + systemProperty 'spring.profiles.active', 'dev' // Set active profile if needed + } +} \ No newline at end of file diff --git a/build/classes/java/main/com/example/kafkaapp/KafkaApp.class b/build/classes/java/main/com/example/kafkaapp/KafkaApp.class new file mode 100644 index 0000000..e883d20 Binary files /dev/null and b/build/classes/java/main/com/example/kafkaapp/KafkaApp.class differ diff --git a/build/classes/java/main/com/example/kafkaapp/service/KafkaConsumer.class b/build/classes/java/main/com/example/kafkaapp/service/KafkaConsumer.class new file mode 100644 index 0000000..62e3fc1 Binary files /dev/null and b/build/classes/java/main/com/example/kafkaapp/service/KafkaConsumer.class differ diff --git a/build/classes/java/main/com/example/kafkaapp/service/KafkaProducerConfig.class b/build/classes/java/main/com/example/kafkaapp/service/KafkaProducerConfig.class new file mode 100644 index 0000000..c5ba6d8 Binary files /dev/null and b/build/classes/java/main/com/example/kafkaapp/service/KafkaProducerConfig.class differ diff --git a/build/classes/java/main/com/example/kafkaapp/service/ProducerService.class b/build/classes/java/main/com/example/kafkaapp/service/ProducerService.class new file mode 100644 index 0000000..06aa20f Binary files /dev/null and b/build/classes/java/main/com/example/kafkaapp/service/ProducerService.class differ diff --git a/build/libs/java-2-0.0.1-SNAPSHOT-plain.jar b/build/libs/java-2-0.0.1-SNAPSHOT-plain.jar new file mode 100644 index 0000000..daf1458 Binary files /dev/null and b/build/libs/java-2-0.0.1-SNAPSHOT-plain.jar differ diff --git a/build/libs/java-2-0.0.1-SNAPSHOT.jar b/build/libs/java-2-0.0.1-SNAPSHOT.jar new file mode 100644 index 0000000..ee67a74 Binary files /dev/null and b/build/libs/java-2-0.0.1-SNAPSHOT.jar differ diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html new file mode 100644 index 0000000..d1f7fe7 --- /dev/null +++ b/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/build/resolvedMainClassName b/build/resolvedMainClassName new file mode 100644 index 0000000..d4a1a2a --- /dev/null +++ b/build/resolvedMainClassName @@ -0,0 +1 @@ +com.example.kafkaapp.KafkaApp \ No newline at end of file diff --git a/build/resources/main/application.yaml b/build/resources/main/application.yaml new file mode 100644 index 0000000..31f970b --- /dev/null +++ b/build/resources/main/application.yaml @@ -0,0 +1,20 @@ +spring: + kafka: + bootstrap-servers: localhost:9093 + consumer: + group-id: kafka-spring-app-group + security: + protocol: SSL + ssl: + trust-store-location: file:/workspaces/java-2/kafka.pfx + trust-store-password: + trust-store-type: pkcs12 + key-store-location: file:/workspaces/java-2/kafka.pfx + key-store-password: + key-store-type: pkcs12 + key-password: + properties: + "ssl-endpoint-identification-algorithm": "" + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.apache.kafka.common.serialization.StringSerializer diff --git a/build/tmp/bootJar/MANIFEST.MF b/build/tmp/bootJar/MANIFEST.MF new file mode 100644 index 0000000..89ddc0c --- /dev/null +++ b/build/tmp/bootJar/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Main-Class: org.springframework.boot.loader.JarLauncher +Start-Class: com.example.kafkaapp.KafkaApp +Spring-Boot-Version: 3.0.4 +Spring-Boot-Classes: BOOT-INF/classes/ +Spring-Boot-Lib: BOOT-INF/lib/ +Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx +Spring-Boot-Layers-Index: BOOT-INF/layers.idx +Build-Jdk-Spec: 21 +Implementation-Title: java-2 +Implementation-Version: 0.0.1-SNAPSHOT + diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/KafkaApp.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/KafkaApp.class.uniqueId1 new file mode 100644 index 0000000..64c220d Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/KafkaApp.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/KafkaConsumer.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/KafkaConsumer.class.uniqueId0 new file mode 100644 index 0000000..911fb62 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/KafkaConsumer.class.uniqueId0 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..cd2d3e2 Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/creds/empty b/creds/empty new file mode 100644 index 0000000..e69de29 diff --git a/creds/kafka.pfx b/creds/kafka.pfx new file mode 100644 index 0000000..5061184 Binary files /dev/null and b/creds/kafka.pfx differ diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..46908cd --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,37 @@ +version: '3' + +services: + zookeeper: + image: confluentinc/cp-zookeeper:7.9.0 + container_name: zookeeper + environment: + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 + ports: + - "2181:2181" + + kafka: + image: confluentinc/cp-kafka:7.9.0 + container_name: kafka + volumes: + - /workspaces/java-2/creds:/etc/kafka/secrets/ + depends_on: + - zookeeper + environment: + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' + KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://kafka:9092,SSL://localhost:9093' + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT,SSL:SSL' + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + KAFKA_SSL_KEYSTORE_FILENAME: kafka.pfx + KAFKA_SSL_KEYSTORE_TYPE: PKCS12 + KAFKA_SSL_CLIENT_AUTH: required + KAFKA_SSL_KEYSTORE_CREDENTIALS: empty + KAFKA_SSL_KEY_CREDENTIALS: empty + KAFKA_SSL_TRUSTSTORE_FILENAME: kafka.pfx + KAFKA_SSL_TRUSTSTORE_CREDENTIALS: empty + KAFKA_SSL_TRUSTSTORE_TYPE: PKCS12 + ports: + - "9092:9092" + - "9093:9093" \ No newline at end of file diff --git a/dumb.crt b/dumb.crt new file mode 100644 index 0000000..4697a7f --- /dev/null +++ b/dumb.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCTCCAfECFFGG94CeZ54LSnygfaCx3x+vJz7zMA0GCSqGSIb3DQEBCwUAMEEx +CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJPSDEPMA0GA1UECgwGd2FnbmVyMRQwEgYD +VQQDDAtkdW1iLmluaG9tZTAeFw0yNTA1MDIyMzExMzZaFw0yNjA1MDIyMzExMzZa +MEExCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJPSDEPMA0GA1UECgwGd2FnbmVyMRQw +EgYDVQQDDAtkdW1iLmluaG9tZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBANgutIbPUieGFISCk7KghvC/nHbXhB23XIrpjKGv40opA7TEguSk1gSnyTyd +m3HooEIjXLME59PerJbXCMlN60JbWjrHIPyTB2sjs0rmM/RZJDsqsLWU6xKnpnGE +ReN9fCXdFuwP2duK7L2mwTrOV/u7gmdDfhN9wi1AisisrmwtZyUGoWIkNgq2plkr +enDnvZuo7zJITswJQUcgQ3MVPOHkfHQLk69cZZzxcLKnF9j7HNtaqrYW9OnNz4Zl ++P6bSAQAUPvhB20k+ESmErwiji7xmr6c9Pm+tBIz3zyjNBpl/50Fnh33Zs/YLzSD +TntI7Cp5iBZsG/NIFi5cVxTkCT0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAygsP +HfjEwUrS6AuO7/u9rLY/RNn9m+F+KWTpOI+AFmkBcRS6qekv9/XZqvqTXtXtDdPV +eb+NbIQ3LmN9cxYxxg0IbX5GMsYV1OpjOipHt+PDiYmvePFKt7sM1z1BKGlf3EWX +vd4zGj4zfzDJ6Qe/XvHYr44jiMuM9nAoh0diTr+3zalCyDGp3hJhn3stLW/cJT9F +vJ3gknpu4k0k2JJwaXfhnp3u1jjZbJZSCERKZQKtJjnN0Vowm4LTnnZc2aEpnw5V +I5O6F+NeKLjG3XfbhS4cvTWmkecjK5sWvREHZLlUoUeinTu3aSW7RO2XLbeCyUGH +TYXPkvj/UGrRb1EJTg== +-----END CERTIFICATE----- diff --git a/dumb.csr b/dumb.csr new file mode 100644 index 0000000..9d31abb --- /dev/null +++ b/dumb.csr @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIChjCCAW4CAQAwQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk9IMQ8wDQYDVQQK +DAZ3YWduZXIxFDASBgNVBAMMC2R1bWIuaW5ob21lMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA2C60hs9SJ4YUhIKTsqCG8L+cdteEHbdciumMoa/jSikD +tMSC5KTWBKfJPJ2bceigQiNcswTn096sltcIyU3rQltaOscg/JMHayOzSuYz9Fkk +OyqwtZTrEqemcYRF4318Jd0W7A/Z24rsvabBOs5X+7uCZ0N+E33CLUCKyKyubC1n +JQahYiQ2CramWSt6cOe9m6jvMkhOzAlBRyBDcxU84eR8dAuTr1xlnPFwsqcX2Psc +21qqthb06c3PhmX4/ptIBABQ++EHbST4RKYSvCKOLvGavpz0+b60EjPfPKM0GmX/ +nQWeHfdmz9gvNINOe0jsKnmIFmwb80gWLlxXFOQJPQIDAQABoAAwDQYJKoZIhvcN +AQELBQADggEBAL4riwxhbEomTAMpjhgiRptjRg99L3vHTEk837Rr7+tGjLV38uuu +Zh3HIoGlArqmNABemVJMyMj4t3C0WHOVgp2sRPiUpSDL95yyjo9fluNy3l/jjxYH +xbT7f7RGXlQFjX3sWK6rs4p8t2zBCzMAySa6gD7OxTruVrrDh0x2Oq5lHMN+3h1D +EeccTvjDEuhBs5xqq0zvpkxFNgfVx7Pj/WEiXP0U/KkB9LvfwO/ytRupuIXuSqS5 +D7GEidKvGGZwGQWj/exsCb/RQFL/fiXOH7/GystgR8fCL9L4EzKPEZBR3GKjdrTE +XGhB18ed75BH5TSSgQETFIxvK5xJu1/e3RA= +-----END CERTIFICATE REQUEST----- diff --git a/dumb.key b/dumb.key new file mode 100644 index 0000000..fb07908 --- /dev/null +++ b/dumb.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYLrSGz1InhhSE +gpOyoIbwv5x214Qdt1yK6Yyhr+NKKQO0xILkpNYEp8k8nZtx6KBCI1yzBOfT3qyW +1wjJTetCW1o6xyD8kwdrI7NK5jP0WSQ7KrC1lOsSp6ZxhEXjfXwl3RbsD9nbiuy9 +psE6zlf7u4JnQ34TfcItQIrIrK5sLWclBqFiJDYKtqZZK3pw572bqO8ySE7MCUFH +IENzFTzh5Hx0C5OvXGWc8XCypxfY+xzbWqq2FvTpzc+GZfj+m0gEAFD74QdtJPhE +phK8Io4u8Zq+nPT5vrQSM988ozQaZf+dBZ4d92bP2C80g057SOwqeYgWbBvzSBYu +XFcU5Ak9AgMBAAECggEBAJHzhmH1mouglD2aQsk4Y6IqWyJJAqNlZg9K+m026Ibr +BduHSK/BMdTWyqAn8AiJe5jrcuxSBYofLfpwlzgBaTHVpydDxVuAkGOfKK8KmE0B +2dowSjltnv9rPI4rNVwPHkAZ8h3R3c3BD3BDIvXm1bPYtoOtJ3NVVkFi78/n9aKG +DwzkU0vUgrpcrYz7oHz3mS2r1yAf/6jH1VH3mnWz7mP5Vqr6w/bARYPOvXs9WsLu +jpMYTnDQJpidGrU/DzQjsCUpV9CYE2NF7/cGZR04KTHUnxYEvy2623AIVQakOVjO +Jx9c7oENmCpOM2Np/+rUNQGYiEKdiw9U3MsjOqPXZYECgYEA7kwwFRkp0bunNA2z +97AQFCdrtQvoNCgWOUQZ31CXbqlOemtXNwIFkKuUU1zSj6/GS7S6Sd8Gb8cgOpEW +LFVxA/+MsI6Qc00Re4KONsFVqFF8+hMSxaMcN5pvujiviSfLRwB7KtYMjPbQ4g4X +w1aVNn59KOb053jr9Ukzf+csk7ECgYEA6D3xf0/0+RqWFVR5b0lLhze8kZjh0t5R +3EuS8Crg7YvMpUkF7NzlupIO2RL50NdIaSKbI5W0TxF2DakIWnbzUl93PjILmZo7 +BUN5U58Tcq5Ecw/7mn1Cvz4m9ePVTcRDQ0z8PDwOTKyLf3RQAb+HugkVItIqF+Ea +6+Kl+lO9rU0CgYBpuA1A3vgJnznvwwCLq2WGu3JyUMUElqA9abQcubFlG+HAN+zq +b5AufaCBV1Xm/zF3Fsfqy/IcFvh6YzG2G3XXM0GkdqspLBDMfcBAFIe+8+ABRgL3 +AYUcOfzFXi6qJ6hsaI88EthglYNYNq5eMARkt7spMUWHh8MPABnD7bh+EQKBgHXg +euMTwlNtmx/YcIp7uUo4kA2We4h8LzCRa1NbcC8h9g0us0M2G6RG3iJv7zyBCM/U +MMovAgXf5vuoAAVqurXknrGC1UBxd+OEC+DVrRlYOoXsZthTG73V3hCQQ4PlSf6u +5JfuI5PnQCbA8prwjANw+Llj0tmr9+4ia/xS5MNBAoGAdXNaV5I1LKkdB1+AW2ee +CZmNwjIn4XvkxkI82wrGDORR+zV0qGxQUk6Wb1+PlxWKDKkzxKc7xRlDN49mja5A +47E7+hygLjsI9cx/3NWlKEY1T+8+GGlWRPfNBWMPIEicNN+FcYbf50qKQgCXHyI+ +Jaj+xs7C37PIQDTeuoUKCaI= +-----END PRIVATE KEY----- diff --git a/dumb.pfx b/dumb.pfx new file mode 100644 index 0000000..963d015 Binary files /dev/null and b/dumb.pfx differ diff --git a/kafka-cert.crt b/kafka-cert.crt new file mode 100644 index 0000000..5ae4114 --- /dev/null +++ b/kafka-cert.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDOTCCAiECFE2uzPsjMIajh6lguqCd81S/8fb3MA0GCSqGSIb3DQEBCwUAMFkx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yNTA1 +MDMxOTAwMzNaFw0zNTA1MDExOTAwMzNaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQI +DApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx +EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMcUzfbIhdbJiRCt3hYGvLf1ppTbPsczCYuePXL6cwkTTG2IyRnx9LdQ3xBl +3Hk80VQwzfPSMjfyYHULBDoUXc3vPuPK4SGTCn254OVN+hF4Rjls70N1UZZbBhHi +kXLGi087Tn+cAlu+TNM7z6kFXrFrt9sSzZ/9sFR731pg+Vgwj4v2bsom1muhkrWp +w5AdbC7feowOpGT8S7rzMOTHqpQUiz6+02SFw+6EfkqWfInjWvQ7H7AG4/g2jFU4 +uE1EdWr2LiGIbMhOYnIAWw8WfdRINbryQhtWV0d5uaFVKaJV21zLe7NjZsyk7oNv +S1RSe9EeThMtFBhq1zp2XZmJVxsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAcYZh +8OCoemFGpCKLpRY0WYLi6s6XObDU8w9d6Esd3gIjD+feQSMgfmiESs3bURCjDZOa +catvfvpMAQVuDTdEAAJ4PXcwlWLAYYIGML4l2y+pmfiK5w4s27Rqe54gemS+CZFy +pa6iCZJ7sLX+wOOClks5Ho9JD628NpPeIDrqe7oBe1f51eApLfyl69Xv2VJTMs7p +NNyC+gRYHJklECSWfdDlEhzfACzlqjIENNmN80LqYuoKN78uqV42oOIpYBRN8oQq +Puza1WzlEzJEa8yMTffyneXp5r0/Jm+o+AwlMKNTnytoZIYjwj5RM1e1w361BsI4 +9YPEnHnyvMfid/NiuA== +-----END CERTIFICATE----- diff --git a/kafka-private.key b/kafka-private.key new file mode 100644 index 0000000..a4bd043 --- /dev/null +++ b/kafka-private.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHFM32yIXWyYkQ +rd4WBry39aaU2z7HMwmLnj1y+nMJE0xtiMkZ8fS3UN8QZdx5PNFUMM3z0jI38mB1 +CwQ6FF3N7z7jyuEhkwp9ueDlTfoReEY5bO9DdVGWWwYR4pFyxotPO05/nAJbvkzT +O8+pBV6xa7fbEs2f/bBUe99aYPlYMI+L9m7KJtZroZK1qcOQHWwu33qMDqRk/Eu6 +8zDkx6qUFIs+vtNkhcPuhH5KlnyJ41r0Ox+wBuP4NoxVOLhNRHVq9i4hiGzITmJy +AFsPFn3USDW68kIbVldHebmhVSmiVdtcy3uzY2bMpO6Db0tUUnvRHk4TLRQYatc6 +dl2ZiVcbAgMBAAECggEAPIapu+7pKg0p2+VQkRfJRpCr7bPemUd+DnG0swFL+iVg +5ihhI785LIas2tptNnr0FYmlBA0S8YmCI/OOfG32uwaS80SaP8/pr6HUq0KS1b7g +ctMYx0Si4niYFtXwbJnKfvNEAW4YFXZ8+vfDQdr9GCnswvErjQnfE0B5/otfI51O +PkpcWC6z8eG3HF1cMIdiZIYOd8Ro0tIkrVTaP3jmFc+Aui81D73343yuAti2pQBn +NlyAdV6bryv+TJaRHvGoKlTJkNo+3AYcsxadnLD0K62BE9+J1bgRXtoOa7RjjAd3 +L2ZzLq49HvGm7Ju3Hwg9U6n2jg+97iNN+MPFqq6JoQKBgQD0yUYTkJ5xoBBdmonD +bEsowqdGzzhY88H302VOMMF2vjeQOKUe8iJN56f4No4QiYpvFDcsXR8VEr20Aw61 +GoUOPGtcgNGQGsYj0ZIT0dOQafu/84nLmZDaM9ZvyUukIw9G5vDtnf8xKvFlA9OP +Fy9s1XuN9V5rczXcEQLHwUgQqwKBgQDQM4bV8Y6CASK53Xx5gVlF51M1hptDN2yf +Oi/a6b2XGqumRLXfEJ0NJCkraiuvD0a9C+VIwMhD5Q1dKeZOavLOpfrEMXbecovs +Oo2yKG1hK1IxiZMfZJgvS3vASBAb/tHGPGa/M1KB24itYU3aZZDHAjkfbIY1Ppku +wmL+Jz4zUQKBgG8fW9+P3E2qoyNK/1UmuSvkybk8YtEGvzw4zBllyr2T9ndTL6pP +s0D4c+kbIvzg42YvoChUkcKoQlQQu0F9q39d8EMK+5dWgDJMdernawp5Al8OOLSj +nv1fYO5YTC1T+SBvwFmuSuXQH8uCpCymEtJuS2uTQuy2XXHsiv2RgZyHAoGAf9bz +txBgkaEC4p+GG9F5sHuO0zH4yfgRQV/oHIIjgNHGjgxopDQ+SuBmSxshAZfetpvE +SLze+xl88DSXDpWKy6qM5MT+mS46jm2RrdA3AVApYvN3m/IXpAq0TOeyxI3d3twd +ts9bnRLgxJ0Xwb9Ve2z5CDuJ2M28H0MKp8YO4lECgYEA5WTxR5P2YX2UpuNcPJ3j +Zy3dJ7kpRN5+n4T+vRzAxXafZOFlr31tgiVnSGpP31Xvr0g2sRwjgNv8ANulXFZ5 +emqnZvDc+fBDIaxMymxNUfyMVdCzGsCYiE4ULJrFM5XdSJeqPmG/fUK0T4NaHlv6 +8kGpfsGw26qSkogbfJ7uz7c= +-----END PRIVATE KEY----- diff --git a/kafka.csr b/kafka.csr new file mode 100644 index 0000000..f54b634 --- /dev/null +++ b/kafka.csr @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICnjCCAYYCAQAwWTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx +ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAGA1UEAwwJbG9j +YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxxTN9siF1smJ +EK3eFga8t/WmlNs+xzMJi549cvpzCRNMbYjJGfH0t1DfEGXceTzRVDDN89IyN/Jg +dQsEOhRdze8+48rhIZMKfbng5U36EXhGOWzvQ3VRllsGEeKRcsaLTztOf5wCW75M +0zvPqQVesWu32xLNn/2wVHvfWmD5WDCPi/ZuyibWa6GStanDkB1sLt96jA6kZPxL +uvMw5MeqlBSLPr7TZIXD7oR+SpZ8ieNa9DsfsAbj+DaMVTi4TUR1avYuIYhsyE5i +cgBbDxZ91Eg1uvJCG1ZXR3m5oVUpolXbXMt7s2NmzKTug29LVFJ70R5OEy0UGGrX +OnZdmYlXGwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAJSjDAs5JNWrpGT7bnYV +XWFUmQw0E/uivd8CYnwVf7VK18bGwL770wMGc/9vLm7jep26aWMVmFUwr2FJcGdx +kM3QGrt9tgsmHOYpVt+Xy27GX2px4GpTD7XU039lZNEWpyqSXq2k2xMifQk2ze6d +ntELmI2O6hetezpB4TawxPGut4hzr2VdstEwe8wT4AaBCM4i5om/XdrcOw4IKjlz +MbL9MfEZJRVjh3Vg/lgfbZHzTNZVCzuWNZbA2ybHyUlfz6C2pWQh6d6R9jRvnHQG +cD1e1WxOJFsom27hA9vwPJnLwTT61uB4nOjJxs4IZYnfKMkbX7BRUnyARg6+kEM6 +BHY= +-----END CERTIFICATE REQUEST----- diff --git a/kafka.pfx b/kafka.pfx new file mode 100644 index 0000000..5061184 Binary files /dev/null and b/kafka.pfx differ diff --git a/src/main/java/com/example/kafkaapp/KafkaApp.java b/src/main/java/com/example/kafkaapp/KafkaApp.java new file mode 100644 index 0000000..c481c7e --- /dev/null +++ b/src/main/java/com/example/kafkaapp/KafkaApp.java @@ -0,0 +1,19 @@ +package com.example.kafkaapp; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import com.example.kafkaapp.service.ProducerService; + +@SpringBootApplication +public class KafkaApp { + public static void main(String[] args) throws InterruptedException{ + //SpringApplication.run(KafkaApp.class, args); + ApplicationContext context = SpringApplication.run(KafkaApp.class, args); + ProducerService producerService = context.getBean(ProducerService.class); + System.out.println("Waiting 10 seconds before sending the message..."); + Thread.sleep(10_000); + System.out.println("ok, sending"); + producerService.sendMessage("test-topic-0", "Hello from main()!"); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/kafkaapp/service/KafkaConsumer.java b/src/main/java/com/example/kafkaapp/service/KafkaConsumer.java new file mode 100644 index 0000000..30a1fb9 --- /dev/null +++ b/src/main/java/com/example/kafkaapp/service/KafkaConsumer.java @@ -0,0 +1,15 @@ +package com.example.kafkaapp.service; + +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.stereotype.Service; + +@Service +public class KafkaConsumer { + + @KafkaListener(topics = "test-topic-0", groupId = "group_id") + public void listen(ConsumerRecord record) { + System.out.println("Received message: " + record.value()); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/kafkaapp/service/ProducerService.java b/src/main/java/com/example/kafkaapp/service/ProducerService.java new file mode 100644 index 0000000..a780aff --- /dev/null +++ b/src/main/java/com/example/kafkaapp/service/ProducerService.java @@ -0,0 +1,59 @@ +package com.example.kafkaapp.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Service; +import org.springframework.kafka.core.ProducerFactory; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.config.SslConfigs; +import org.apache.kafka.common.serialization.StringSerializer; +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 java.util.HashMap; +import java.util.Map; + +@Service +public class ProducerService { + + @Autowired + private KafkaTemplate kafkaTemplate; + + public void sendMessage(String topic, String message) { + kafkaTemplate.send(topic, message); + } + +} + +@Configuration +class KafkaProducerConfig { + + @Bean + public ProducerFactory producerFactory() { + Map props = new HashMap<>(); + props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9093"); + props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + props.put("security.protocol", "SSL"); + props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, "/workspaces/java-2/kafka.pfx"); + props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, ""); + props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, "/workspaces/java-2/kafka.pfx"); + props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, ""); + props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "PKCS12"); + props.put(SslConfigs.SSL_KEY_PASSWORD_CONFIG, ""); + + // ✅ Disable hostname verification (the "single extra property") + props.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, ""); + props.put("ssl.endpoint.identification.algorithm", ""); + + return new DefaultKafkaProducerFactory<>(props); + } + + @Bean + public KafkaTemplate kafkaTemplate() { + return new KafkaTemplate<>(producerFactory()); + } +} \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..31f970b --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,20 @@ +spring: + kafka: + bootstrap-servers: localhost:9093 + consumer: + group-id: kafka-spring-app-group + security: + protocol: SSL + ssl: + trust-store-location: file:/workspaces/java-2/kafka.pfx + trust-store-password: + trust-store-type: pkcs12 + key-store-location: file:/workspaces/java-2/kafka.pfx + key-store-password: + key-store-type: pkcs12 + key-password: + properties: + "ssl-endpoint-identification-algorithm": "" + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.apache.kafka.common.serialization.StringSerializer