Skip to content

Commit c176892

Browse files
committed
Added example Worker implementation to 04-worker-c8zio.
1 parent 1c7b7e5 commit c176892

File tree

10 files changed

+117
-14
lines changed

10 files changed

+117
-14
lines changed

04-worker-c7spring/src/main/scala/camundala/camunda7/worker/C7WorkerHandler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ trait C7WorkerHandler extends camunda.ExternalTaskHandler:
188188
end filteredOutput
189189

190190
protected lazy val logger: WorkerLogger =
191-
engineContext.getLogger(getClass)
191+
engineContext.getLogger(classOf[C7WorkerHandler])
192192

193193
private[worker] def isErrorHandled(error: CamundalaWorkerError, handledErrors: Seq[String]) =
194194
error.isMock || // if it is mocked, it is handled in the error, as it also could be a successful output

04-worker-c7spring/src/main/scala/camundala/worker/springDeps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package camundala.worker
33
// Worker
44
export org.springframework.context.annotation.Configuration as SpringConfiguration
55
// WorkerApp
6-
export org.springframework.boot.SpringApplication
6+
export org.springframework.boot.SpringApplication.run as runSpringApp
77
export org.springframework.boot.autoconfigure.SpringBootApplication
88
export org.springframework.boot.context.properties.ConfigurationPropertiesScan
99
export org.springframework.context.annotation.ComponentScan
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package camundala.worker.c8zio
2+
3+
import io.camunda.zeebe.client.ZeebeClient
4+
import io.camunda.zeebe.client.impl.oauth.OAuthCredentialsProviderBuilder
5+
import zio.{ZIO, ZIOAppDefault}
6+
7+
import java.net.URI
8+
import java.time.Duration
9+
10+
object C8WorkerClient extends ZIOAppDefault:
11+
12+
override def run: ZIO[Any, Any, Any] =
13+
ZIO.acquireReleaseWith(zeebeClient)(_.closeClient()): client =>
14+
for
15+
server <- ZIO.attempt(
16+
client
17+
.newTopologyRequest
18+
.send
19+
.join
20+
).forever.fork
21+
worker <- ZIO.attempt(client
22+
.newWorker()
23+
.jobType("publish-tweet")
24+
.handler(ExampleJobHandler())
25+
.timeout(Duration.ofSeconds(10))
26+
.open()).fork
27+
_ <- worker.join
28+
_ <- server.join
29+
yield ()
30+
31+
private lazy val zeebeClient =
32+
ZIO.attempt:
33+
ZeebeClient.newClientBuilder()
34+
.grpcAddress(URI.create(zeebeGrpc))
35+
.restAddress(URI.create(zeebeRest))
36+
.credentialsProvider(credentialsProvider)
37+
.build
38+
39+
private lazy val zeebeGrpc =
40+
"https://dbd4cad1-5621-4d66-b14e-71c92456939a.bru-2.zeebe.camunda.io:443"
41+
private lazy val zeebeRest =
42+
"https://bru-2.zeebe.camunda.io:443/dbd4cad1-5621-4d66-b14e-71c92456939a/v2"
43+
private lazy val audience = "zeebe.camunda.io"
44+
private lazy val clientId = sys.env("CAMUNDA8_CLOUD_CLIENTID")
45+
private lazy val clientSecret = sys.env("CAMUNDA8_CLOUD_CLIENTSECRET")
46+
private lazy val oAuthAPI = "https://login.cloud.camunda.io/oauth/token"
47+
48+
private lazy val credentialsProvider =
49+
new OAuthCredentialsProviderBuilder()
50+
.authorizationServerUrl(oAuthAPI)
51+
.audience(audience)
52+
.clientId(clientId)
53+
.clientSecret(clientSecret)
54+
.build
55+
56+
extension (client: ZeebeClient)
57+
def closeClient() =
58+
ZIO.succeed(if client != null then client.close() else ())
59+
60+
end C8WorkerClient
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package camundala.worker.c8zio
2+
3+
/** To avoid Annotations (Camunda Version specific), we extend ExternalTaskHandler for required
4+
* parameters.
5+
*/
6+
trait C8WorkerHandler:
7+
8+
9+
end C8WorkerHandler
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package camundala.worker.c8zio
2+
3+
import io.camunda.zeebe.client.api.response.ActivatedJob
4+
import io.camunda.zeebe.client.api.worker.{JobClient, JobHandler}
5+
6+
class ExampleJobHandler extends JobHandler:
7+
8+
def handle(client: JobClient, job: ActivatedJob): Unit =
9+
println(s"Handling Job: ${job}")
10+
client.newCompleteCommand(job.getKey).send().join()
11+
12+
13+
end ExampleJobHandler
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
# Local Docker Configuration
2-
zeebe.client.broker.gateway-address=127.0.0.1:26500
3-
zeebe.client.security.plaintext=true
2+
#zeebe.client.broker.gateway-address=127.0.0.1:26500
3+
#zeebe.client.security.plaintext=true
44

55
# Cloud Configuration
6-
#zeebe.client.cloud.region=bru-2
7-
#zeebe.client.cloud.clusterId=ad5279ee-dfe3-43af-86c3-34f6cf2e9683
8-
#zeebe.client.cloud.clientId=7j31qDoCE4dDmLQqiPQp3dn2ecCFOq.w
9-
#zeebe.client.cloud.clientSecret=X_5T8x0VG._sQ9LACqnkeIRMmA5-iM0yf3O4lMAUXNkK20qex.eBN~cjGJAVSIDA
6+
camunda.client.mode=saas
7+
camunda.client.auth.client-id=L9n_ZQ3ehCtgPjTce8S7nabLGxhiVz3E
8+
camunda.client.auth.client-secret=tu9c98w~Ip~7T_esBjS_8PMGl0.34R898Yt29wwzhyeMCQO78eOx6.4rk6ucsnsE
9+
camunda.client.cluster-id=dbd4cad1-5621-4d66-b14e-71c92456939a
10+
camunda.client.region=bru-2
1011

1112
server.port=8887

05-examples/twitter/04-c8-spring/src/main/resources/twitter-auto.bpmn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,4 @@
8484
</bpmndi:BPMNShape>
8585
</bpmndi:BPMNPlane>
8686
</bpmndi:BPMNDiagram>
87-
</definitions>
87+
</definitions>

05-examples/twitter/04-c8-spring/src/main/scala/camundala/examples/twitter/TwitterExampleApplication.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package camundala.examples.twitter
22

33
import camundala.camunda8.CaseClassJsonMapperConfig
4-
import io.camunda.zeebe.spring.client.EnableZeebeClient
5-
import io.camunda.zeebe.spring.client.annotation.ZeebeDeployment
4+
import io.camunda.zeebe.spring.client.annotation.Deployment
65
import org.springframework.boot.SpringApplication
76
import org.springframework.boot.autoconfigure.SpringBootApplication
87
import org.springframework.context.annotation.Configuration
@@ -11,8 +10,7 @@ import org.springframework.context.annotation.Configuration
1110
class AppConfig extends CaseClassJsonMapperConfig
1211

1312
@SpringBootApplication
14-
@EnableZeebeClient
15-
@ZeebeDeployment(resources = Array("classpath*:twitter*.bpmn"))
13+
@Deployment(resources = Array("classpath*:twitter*.bpmn"))
1614
class TwitterExampleApplication
1715

1816
object TwitterExampleApplication:

build.sbt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ lazy val root = project
3030
helper,
3131
// implementations
3232
camunda7Worker,
33+
camunda8Worker,
3334
// experiments
3435
camunda, // not in use
3536
camunda8, // not in use
@@ -171,6 +172,21 @@ lazy val camunda7Worker = project
171172
)
172173
.dependsOn(worker)
173174

175+
lazy val camunda8Worker = project
176+
.in(file("./04-worker-c8zio"))
177+
.configure(publicationSettings)
178+
.settings(projectSettings("camunda8-worker"))
179+
.settings(unitTestSettings)
180+
.settings(
181+
autoImportSetting,
182+
libraryDependencies ++= Seq(
183+
sttpDependency,
184+
zeebeJavaClientDependency,
185+
zioDependency
186+
)
187+
)
188+
.dependsOn(worker)
189+
174190
// just demo
175191
lazy val camunda = project
176192
.in(file("./04-c7-spring"))

project/Dependencies.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ object Dependencies {
4242
val camundaVersion = "7.22.0" // external task client
4343
val jaxbApiVersion = "4.0.2" // needed by the camunda client 7.21?!
4444
val scaffeineV = "5.2.1" // caching
45+
val zioVersion = "2.1.14" // zio
4546
// - sttpClient3
4647

4748
// --- Experiments
@@ -83,7 +84,12 @@ object Dependencies {
8384
"org.springframework.boot" % "spring-boot-starter-webflux" % springBootVersion,
8485
"io.camunda.spring" % "spring-boot-starter-camunda" % camunda8Version,
8586
"com.fasterxml.jackson.module" %% "jackson-module-scala" % scalaJacksonVersion
86-
).map(_.exclude("org.slf4j", "slf4j-api"))
87+
)//.map(_.exclude("org.slf4j", "slf4j-api"))
88+
89+
val zeebeJavaClientDependency =
90+
"io.camunda" % "zeebe-client-java" % "8.7.0-alpha2" //TODO camunda8Version,
91+
val zioDependency =
92+
"dev.zio" %% "zio" % zioVersion
8793

8894
// examples
8995
val camundaDependencies = Seq(

0 commit comments

Comments
 (0)