Search code examples
spring-bootevent-handlingmicroservicesspring-cloudaxon

How does Spring Micro service know Axon Server Port


This entire code is available at: https://github.com/Naresh-Chaurasia/API-MicroServices-Kafka/tree/master/Microservices-CQRS-SAGA-Kafka/DiscoveryService

I have following spring-boot setup.

  • Client/Postman is calling API gateway (which is also acting as load balancer).
  • The API gateway and Products are spring boot application/Microservices with are registered with Eureka
  • Discovery Service (Also Spring Boot Application).
  • I run the applications in following order: Eureka discovery service, Products, API Gateway

In the pom.xml file for Products, I have following entry:

<dependency>
    <groupId>org.axonframework</groupId>
    <artifactId>axon-spring-boot-starter</artifactId>
    <version>4.4.7</version>
</dependency>

I am using following Axon Server: AxonServer-4.5.5.jar to run the Axon Server, and the axonserver.properties entry is as follows:

server.port=8026
axoniq.axonserver.name=My Axon Server
axoniq.axonserver.hostname=localhost
axoniq.axonserver.devmode.enabled=true

The default port for Axon server is 8024. I have tried running it on 8024, 8025, 8026 by updating the axonserver.properties file. The Axon server is running on localhost.

Every time I change the port in Axon server by updating the axonserver.properties file, the Product Microservice identifies the Axon server, even though Axon Server is not running on default port. I do not specify Axon server port in the Product Microservice.

My Question is: Even though I NOT am Specifying the port in Product Microservice, how is it that the Product Microservice identifies the correct port.


Solution

  • I believe you are missunderstanding the ports here. Axon Server has 3 ports:

    • server.port: HTTP port for the Axon Server console. Default is 8024;
    • port: gRPC port for the Axon Server node. Default is 8124;
    • internal-port: gRPC port for communication between Axon Server nodes within a cluster (Axon EE only). Default is 8224.

    So, a default AF application will always try to connect to an Axon Server running at 8124, which is the gRPC port. The 8024 port is used for you to access AS dashboard (and other more specific things, like the Rest API endpoints).

    To add a bit more, you can check the ref-guide for the full list of properties and configuration here: https://docs.axoniq.io/reference-guide/axon-server/administration/admin-configuration/configuration#configuration-properties