天天看點

11、基于consul的服務注冊與發現一、将微服務注冊到consul二、服務的消費者從consul拉取所有的服務清單

一、将微服務注冊到consul

1、修改每個微服務的pom檔案,添加SpringCloud提供的基于Consul的依賴

<!--SpringCloud提供的基于Consul的服務發現--> 
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-consul-discovery</artifactId> 
</dependency>
<!--actuator用于心跳檢查--> 
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>
           

其中 spring-cloud-starter-consul-discovery 是SpringCloud提供的對consul支援的相關依賴。

spring-boot-starter-actuator 适用于完成心跳檢測響應的相關依賴。

2、修改每個微服務的application.yml配置檔案,添加consul服務發現的相關配置資訊

server:
  port: 9001 #端口
spring:
  application:
    name: service-product #服務名稱
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    username: root
    password: 111111
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true
  ###開始配置consul的服務注冊
  cloud:
    consul:
      host: 127.0.0.1 #consul伺服器的主機位址
      port: 8500 #consul伺服器的ip位址
      discovery:
        #是否需要注冊
        register: true
        #注冊的執行個體ID (唯一标志)
        instance-id: ${spring.application.name}-1
        #服務的名稱
        service-name: ${spring.application.name}
        #服務的請求端口
        port: ${server.port}
        #指定開啟ip位址注冊
        prefer-ip-address: true
        #目前服務的請求ip
        ip-address: ${spring.cloud.client.ip-address}
           

3、再次通路consul位址:127.0.0.1:8500

11、基于consul的服務注冊與發現一、将微服務注冊到consul二、服務的消費者從consul拉取所有的服務清單

二、服務的消費者從consul拉取所有的服務清單

1、在服務消費方引入依賴

<!--SpringCloud提供的基于Consul的服務發現--> 
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-consul-discovery</artifactId> 
</dependency>
<!--actuator用于心跳檢查--> 
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>
           

2、在服務消費方引入consul的相關配置

server:
  port: 9002 #端口
spring:
  application:
    name: service-order #服務名稱
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    username: root
    password: 111111
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true
  ###開始配置consul的服務注冊
  cloud:
    consul:
      host: 127.0.0.1 #consul伺服器的主機位址
      port: 8500 #consul伺服器的ip位址
      discovery:
        #是否需要注冊
        register: true
        #注冊的執行個體ID (唯一标志)
        instance-id: ${spring.application.name}-1
        #服務的名稱
        service-name: ${spring.application.name}
        #服務的請求端口
        port: ${server.port}
        #指定開啟ip位址注冊
        prefer-ip-address: true
        #目前服務的請求ip
        ip-address: ${spring.cloud.client.ip-address}
           

3、用服務消費方調用服務提供方

因為引入了spring-cloud-starter-consul-discovery依賴,此時springcloud已經對consul進行了進一步的封裝,向其中內建了ribbon的支援,是以可以使用@LoadBlanced注解。

@SpringBootApplication
@EntityScan("cn.itcast.order.entity")
public class OrderApplication {


	/**
	 * springcloud對consul進行了進一步的處理
	 *  向其中內建了ribbon的支援
	 */

	@LoadBalanced
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	public static void main(String[] args) {
		SpringApplication.run(OrderApplication.class,args);
	}
}
           

是以在controller中不需要寫死服務提供者的ip,可以通過服務提供者的服務名稱進行調用。

@RestController
@RequestMapping("/order")
public class OrderController {

	@Autowired
	private RestTemplate restTemplate;

	@RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
	public Product findById(@PathVariable Long id) {
		Product product = restTemplate.getForObject("http://service-product/product/1",Product.class);;
		return product;
	}

}
           

繼續閱讀