bad java doing bad things

main
Nathan Wagner 2 weeks ago
commit 88aee3ff5c

@ -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"
}

@ -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
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
com.example.kafkaapp.KafkaApp

@ -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

@ -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

@ -0,0 +1,2 @@
Manifest-Version: 1.0

Binary file not shown.

@ -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"

@ -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-----

@ -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-----

@ -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-----

Binary file not shown.

@ -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-----

@ -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-----

@ -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-----

Binary file not shown.

@ -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()!");
}
}

@ -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<String, String> record) {
System.out.println("Received message: " + record.value());
}
}

@ -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<String, String> kafkaTemplate;
public void sendMessage(String topic, String message) {
kafkaTemplate.send(topic, message);
}
}
@Configuration
class KafkaProducerConfig {
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> 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<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}

@ -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
Loading…
Cancel
Save