零基础带你快速入门consul-难道consul还能这样用?
文章目錄
- 一、consul的下載安裝
- 二、框架搭建
- 1、創建父工程
- 2、創建服務提供子模塊(provider-consul-module)
- 3、創建服務消費子模塊(consumer-consul-module)
- 二、代碼準備
- 1、父工程pom
- 2、服務提供子模塊pom
- 3、消費服務子模塊pom
- 4、提供服務模塊和消費模塊服務模塊啟動類
- 5、提供服務模塊和消費模塊服務模塊application.yml文件
- 6、提供服務模塊和消費模塊服務模塊controller代碼
- 7、RestTemplate詳解及其配置
- 三、測試
- 四、靈魂拷問?為什么需要注冊中心
一、consul的下載安裝
consul的下載地址:https://www.consul.io/downloads
解壓之后
在該路徑下以cmd的方式打開
然后啟動
consul agent -dev
二、框架搭建
1、創建父工程
刪除src目錄
2、創建服務提供子模塊(provider-consul-module)
3、創建服務消費子模塊(consumer-consul-module)
二、代碼準備
1、父工程pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cloud</groupId><artifactId>springcloud_all</artifactId><version>1.0-SNAPSHOT</version><modules><module>provider-consul-module</module><module>consumer-consul-module</module></modules><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.13</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>8.0.19</mysql.version><druid.version>1.2.4</druid.version><mybatis.spring.boot.version>2.1.4</mybatis.spring.boot.version><druid.spring.boot.version>1.2.4</druid.spring.boot.version><springfox-swagger-ui.version>2.9.2</springfox-swagger-ui.version><springfox-swagger2.version>2.9.2</springfox-swagger2.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.4.3</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud 2020.0.2--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.2</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.spring.boot.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${springfox-swagger-ui.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${springfox-swagger2.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build> </project>2、服務提供子模塊pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud_all</artifactId><groupId>com.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.provider</groupId><artifactId>provider-consul-module</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies> </project>3、消費服務子模塊pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud_all</artifactId><groupId>com.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.consumer</groupId><artifactId>consumer-consul-module</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies> </project>4、提供服務模塊和消費模塊服務模塊啟動類
@SpringBootApplication @EnableDiscoveryClient public class ConsulProviderApplication {public static void main(String[] args) {SpringApplication.run(ConsulProviderApplication.class, args);} } @SpringBootApplication @EnableDiscoveryClient public class ConsulConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsulConsumerApplication.class, args);} }@EnableDiscoveryClient注解的作用:能夠讓注冊中心能夠發現,掃描到微服務。
5、提供服務模塊和消費模塊服務模塊application.yml文件
server:port: 8006 spring:cloud:consul:host: 127.0.0.1port: 8500discovery:service-name: ${spring.application.name}application:name: provider-consul-module server:port: 80 spring:application:name: consumer-consul-modulecloud:consul:host: 127.0.0.1port: 8500discovery:service-name: ${spring.application.name}6、提供服務模塊和消費模塊服務模塊controller代碼
@RestController @Slf4j public class ProviderConsulController {@Value("${server.port}")private String serverPort;@GetMapping(value = "/provider/test")public String test() {return "提供服務模塊服務端口號為:" + serverPort + "《--------------》" + UUID.randomUUID().toString();} } @RestController public class ConsumerConsulController {private static final String INVOKE_URL = "http://provider-consul-module";@Resourceprivate RestTemplate restTemplate;@GetMapping(value = "/consumer/test")public String getData() {return restTemplate.getForObject(INVOKE_URL + "/provider/test", String.class);} }7、RestTemplate詳解及其配置
RestTemplate是spring封裝的一個服務端遠程HTTP請求工具,支持常見的Rest請求(get、post等)
簡單了說就是用來遠程調用的,因為你訂單模塊是一個服務,消費模塊又是一個單獨的服務,兩個服務端的端口號要進行交互,所以就有了RestTemplate
當然要注入RestTemplate(注意是在消費模塊配置,因為是消費服務調用提供服務模塊)
@Configuration public class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate AutoRestTemplate() {return new RestTemplate();} }三、測試
啟動提供服務模塊和消費服務模塊(注意一定要開啟zookeeper服務,順便進入zookeeper客戶端)
訪問http://localhost:8500,你可以看到consul的客戶端界面(然后我們啟動的兩個服務已經成功注冊進consul)
接口測試
成功!
四、靈魂拷問?為什么需要注冊中心
我們在微服務中首先需要面對的問題是服務之間如何進行通信呢?在單體架構中,我們只要將服務的接口暴露,然后通過http請求即可,微服務當然也可以這樣。
問題是我們請求的url是固定的,單體服務為我們還可以很快的修改;一旦有大量的服務那就需要我們手動維護服務接口,配置負載均衡;服務宕機后,如何及時下線呢?
總而言之注冊中心必不可少(至少當前時代是這樣)。
總結
以上是生活随笔為你收集整理的零基础带你快速入门consul-难道consul还能这样用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信:禁用小程序跳转 App;华为商城上
- 下一篇: 零基础带你五行代码实现聊天机器人-再这么