微服务概述
- 微服务是一种将业务系统进一步拆分的架构风格
- 为服务强调每个单一业务都可以独立运行
- 每个单一服务都应该使用更轻量的机制保持通信
- 服务不强屌环境,可以不同语言或者数据源
微服务选择
- dubbo
- Spring Cloud
Spring Cloud是一个微服务的集合(提供了API网关,负载均衡等)
微服务基本概念
- 提供者:服务提供者,提供服务实现
- 消费者:服务调用者,调用提供商提供的服务实现
- 注册地:服务注册与发现的注册中心,通常使用动物园管理员
- 显示器:统计服务的调用次数与调用时间的监控中心
- 集装箱:服务运行容器
- 同一个服务可以即是供应商,又是消费者
首先再搭建这个环境前,需要先安装一下zookeeper,还有可以看看一springboot下达博文档的https://github.com/alibaba/dubbo-spring-boot-starter/blob/master/README_zh.md
首先创建一个springboot的项目,建议springboot的半杯是2.0.x的的,我的2.1.0。版本会出一些错误,不知道为什么。
一路接下来,创建好后,对项目右键创建2个模块,一个是供应商,一个是消费者
跟着达博的文档,一步一步的部署
发布达博服务
- 供应商的POM文件中添加依赖
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
- 添加一个ServiceAPI(是添加到com.cn.lx下)
public interface ServiceAPI {
String sendMessage(String message);
}
- 在application.properties添加达博的相关配置信息,样例配置如下
spring.application.name=dubbo-spring-boot-starter
spring.dubbo.server=true
#spring.dubbo.registry=N/A
spring.dubbo.registry=zookeeper://localhost:2181
- 接下来在Spring Boot Application的上添加
@EnableDubboConfiguration
,表示要开启dubbo功能。
@SpringBootApplication
@EnableDubboConfiguration
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
- 创建一个快速启动,里面实现ServiceAPI的方法(第二个服务注解是达博的不是弹簧的)
@Component
@Service(interfaceClass = ServiceAPI.class)
public class QuickstartServiceImpl implements ServiceAPI {
@Override
public String sendMessage(String message) {
return "quickstart-provider-message=" + message;
}
}
启动提供者的启动项,如果在控制台显示dubbo start就说明基本ok。
消费达博服务
- 通用跟供应商一样添加达博的依赖
- 创建一个ServiceAPI(内容和提供者中的一样,位置也一样在com.cn.lx下)
- 在application.properties添加达博的相关配置信息,样例配置如下:
spring.application.name=dubbo-spring-boot-starter
spring.dubbo.registry=zookeeper://localhost:2181
- 通过
@Reference
注入需要使用的界面(创建一个类在com.cn.lx.consumer下快速启动消费者)
@Component
public class QuickstartConsumer {
@Reference(interfaceClass = ServiceAPI.class)
ServiceAPI serviceAPI;
public void sendMessage(String message){
System.out.println(serviceAPI.sendMessage(message));
}
}
- 开启
@EnableDubboConfiguration
@SpringBootApplication
@EnableDubboConfiguration
public class ConsumerApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run =
SpringApplication.run(ConsumerApplication.class, args);
QuickstartConsumer quickstartConsumer= (QuickstartConsumer)run.getBean("quickstartConsumer");
quickstartConsumer.sendMessage("hi");
}
}
启动后就可以在控制台中看到信息