官术网_书友最值得收藏!

Seeing the lookup in action

Now, we are all set to run the product client. To recap, at this stage, we have a Eureka server project and a product project with the following structure:

Let's take a few minutes to review what we did:

  1. We created a Maven project and defined the starters and dependencies.
  2. We created the YML files for bootstrapping and application properties.
  3. We created the ProductSpringApp class containing the main method that is the starting point of the applications.
  4. For the product project, we had the following classes:
    • Product: The domain or entity which we will enhance later
    • ProductService: The microservice responsible for implementing the services and APIs
    • ProductClient: The client to test out the service lookup

Now, let's see it in action:

  1. Run the EurekaApplication class (or run a Maven build on the eureka-server project). Observe the last few lines in the logs:
  1. Run the ProductSpringApp class (or run a Maven build on the product project). Note the last few lines in the the log:
  1. Access the product service directly at: http://localhost:8081/dev/product/4.

    You will see the following response:

{"id":4,"name":"Oranges ","catId":2}
  1. Now, access the client URL, http://localhost:8081/client/4 , which does a lookup of the product service from the service registry and directs it to the respective product service.

    You will see the following response:

 {"id":4,"name":"Oranges ","catId":2}

You may see an internal server error (No instances available for PRODUCT). This can happen while the heartbeat completes and the addresses are re-picked by the Ribbon load balancer. Wait a few seconds for the registry to update and then try again.

A lot has happened under the hood in getting this response:

  1. The HTTP request to get /client/4 was handled by the getProduct method in the ProductClient class.
  2. It did a lookup of the service from the Eureka registry. This is where we find log statements as follows:
c.n.l.DynamicServerListLoadBalancer: Using serverListUpdater PollinServerListUpdater
c.netflix.config.ChainedDynamicProperty: Flipping property: PRODUCT.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer
c.n.l.DynamicServerListLoadBalancer: DynamicServerListLoadBalancer for client PRODUCT intiated: DynamicServerListLoadBalancer:
  1. After it did the lookup, it forwarded the request to the actual ProductService through the Ribbon load balancer library.

This was just a simple mechanism of a client invoking services through a dynamic lookup. In later chapters, we will add functionality to make it resilient and functional in terms of getting data from the database.

主站蜘蛛池模板: 武平县| 奇台县| 大英县| 剑川县| 高青县| 澎湖县| 濮阳县| 石河子市| 泗水县| 金秀| 柳江县| 鄂伦春自治旗| 江北区| 大足县| 周宁县| 墨脱县| 塔城市| 大名县| 沽源县| 饶河县| 万年县| 安图县| 邯郸县| 页游| 收藏| 华蓥市| 钟祥市| 青田县| 富锦市| 阜平县| 马尔康县| 蕲春县| 华池县| 万山特区| 沅陵县| 乐平市| 万山特区| 灌云县| 吴桥县| 凌海市| 吉木乃县|