1. 什么是MSE
时隔四个月终于更新了,这四个月主要是在忙工作忙生活,我也发现工作之后确实闲暇时间变少了,有的时候甚至只能在地铁上学习。今天主要想分享一下我司的重磅产品:微服务引擎MSE,我相信对于广大开发者来说,这绝对是一个福音,我使用了之后也觉得真的是解放双手。那么问题来了,到底什么是微服务引擎嘞?
微服务引擎MSE(Microservices Engine)是一个面向业界主流开源微服务生态的一站式微服务平台,提供注册配置中心(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循OpenSergo服务治理规范)的能力。
MSE产品主要包括了三个模块:微服务注册中心、微服务治理、云原生网关。我们在开发微服务应用时,可以根据需要搭配使用MSE来方便我们的开发。
微服务注册配置中心
MSE的微服务注册配置中心兼容Nacos、ZooKeeper和Eureka三大引擎,这三个引擎都是目前微服务架构比较主流的微服务注册配置引擎,当然MSE还是比较推荐使用Nacos作为微服务注册配置中心。
ZooKeeper、Nacos和Eureka三种引擎所支持的功能如下表所示:
「本篇文章主要是实践MSE微服务引擎的注册配置中心能力」,当然我还是比较倾向选择Nacos作为注册配置中心。在实践之前我们还需要去阿里云官网开通MSE服务,具体的操作指引请看:https://help.aliyun.com/document_detail/147951.html。
2. 实践过程
2.1 创建实例
假如你已经开通了MSE集群托管,就可以登录MSE管理控制台,然后选择注册配置中心创建一个实例了。创建完成后,如果所创建的Nacos状态为「运行中」,表示Nacos创建完成。其中访问列对应的「mse.XX.nacos.mse.aliyuncs.com」为Nacos外网访问地址。
2.2 创建服务提供者
我们先创建一个名叫MSENacosProject的Maven项目,这就是我们的父工程了,它的POM依赖如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
我们使用的版本为Spring Cloud Greenwich,对应Spring Cloud Alibaba版本为2.1.1.RELEASE。
-
如果使用Spring Cloud Finchley版本,对应Spring Cloud Alibaba版本为2.0.1.RELEASE。 -
如果使用Spring Cloud Edgware版本,对应Spring Cloud Alibaba版本为1.5.1.RELEASE。
然后我们在父项目下创建一个子工程:「nacos-service-provider」
它的POM依赖如下:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后创建它的Application类
package com.aliyun.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
然后我们在com.aliyun.provider.controller包下创建一个ProviderController
package com.aliyun.provider.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class ProviderController {
@GetMapping(value = "/provider/{string}")
public String provide(@PathVariable String string) {
return "provider被"+string+"调用了";
}
}
接着我们创建一个application.properties
spring.application.name=service-provider
server.port=18081
spring.cloud.nacos.discovery.server-addr=你的外网访问地址:8848
最后我们启动一下应用,就可以验证我们的服务是否被注册到Nacos上了!服务的名称就是我们的spring.application.name。
2.3 创建服务消费者
我们在父工程中创建一个子模块:「nacos-service-consumer」
「然后添加POM依赖:」
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后创建Application类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
接着我们创建一下配置文件「application.properties」
spring.application.name=service-consumer
server.port=18082
spring.cloud.nacos.discovery.server-addr=你的外网访问地址:8848
接着我们创建一个controller
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consumer/{string}")
public String consume(@PathVariable String string){
return restTemplate.getForObject("http://service-provider/provider/"+string, String.class);
}
}
最后我们运行一下这个项目,看看服务列表的服务是不是多了一个service-consumer
然后我们输入:localhost:18082/consumer/consumer
很显然我们在consumer应用中调用了provider应用的controller。
3. 引入dubbo实现服务注册与发现
首先我们要创建一个nacos-service-common的Maven子模块,这里面存放服务接口。
然后我们写一个SayService的接口
package com.aliyun.common.api;
public interface SayService {
public String say();
}
provider和consumer模块我们都要添加两个依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>nacos-service-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
然后我们增加provider的配置:
spring.cloud.nacos.discovery.enabled=true
spring.cloud.nacos.discovery.register-enabled=true
dubbo.scan.base-packages=com.aliyun.provider.service
dubbo.protocols.dubbo.name=dubbo
dubbo.protocols.dubbo.port=-1
dubbo.registry.address=springcloud://你的外网访问地址
我们还要在provider项目中编写SayService接口的实现类
package com.aliyun.provider.service;
import com.aliyun.common.api.SayService;
import org.apache.dubbo.config.annotation.Service;
@Service
public class SayServiceImpl implements SayService {
@Override
public String say(String content) {
return "provider say"+ content;
}
}
接着我们添加consumer的配置:
spring.cloud.nacos.discovery.enabled=true
spring.cloud.nacos.discovery.register-enabled=true
dubbo.protocols.dubbo.name=dubbo
dubbo.protocols.dubbo.port=-1
dubbo.registry.address=spring-cloud://你的外网访问地址
dubbo.cloud.subscribed-services=service-provider
还要改造一下ConsumerController,让它消费一下SayService
@RestController
public class ConsumerController {
@Reference
private SayService sayService;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consumer/{string}")
public String consume(@PathVariable String string){
return restTemplate.getForObject("http://service-provider/provider/"+string, String.class);
}
@GetMapping("/consumer/say/{content}")
public String say(@PathVariable String content){
return sayService.say(content);
}
}
最后我们运行两个程序,先去控制台看看服务有没有注册上去,然后输入URL验证一下结果:
「参考文献:」
https://blog.csdn.net/u011532105/article/details/106245656/
原文始发于微信公众号(Java之禅):使用MSE为SpringCloud应用构建服务注册中心
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/161329.html