# 实现
## 生成微服务框架
1. 切换到 zebra\zebra-gen\target 目录下
2. 执行如下命令,启动代码生成器
```bash
java -jar .\zebra-gen-jar-with-dependencies.jar
```
3. 输入相关信息,参考如下表格
| 项 | 值 | 说明 |
| :--- | :--- | :--- |
| 是否是生成API接口\(Y/N\) | N | N 表示生成微服务框架 |
| 请输入要生成的项目名称 | zebra-sample-start-svc1 | 输入接口对应的 artifactId |
| 输入groupId | com.guosen.zebra.sample | groupId |
## 引入依赖
在 pom.xml 里面添加如下依赖
```markup
<dependency>
<groupId>com.guosen</groupId>
<artifactId>zebra-core</artifactId>
<version>${zebra.version}</version>
</dependency>
<dependency>
<groupId>com.guosen.zebra.sample</groupId>
<artifactId>zebra-sample-start-svc1-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
```
_注:将 ${zebra.version} 替换为使用的 Zebra 版本_
如上,引入接口定义对应的包 zebra-sample-start-svc1-api
## 代码开发
1.新建包
```java
com.guosen.zebra.sample.start.svc1.service.impl
```
2.在此包下添加实现类HelloServiceImpl
```java
package com.guosen.zebra.sample.start.svc1.service.impl;
import com.guosen.zebra.core.grpc.anotation.ZebraService;
import com.guosen.zebra.sample.start.svc1.model.hello.HelloReply;
import com.guosen.zebra.sample.start.svc1.model.hello.HelloRequest;
import com.guosen.zebra.sample.start.svc1.service.HelloService;
@ZebraService
public class HelloServiceImpl implements HelloService {
@Override
public HelloReply sayHello(HelloRequest hellorequest) {
long currentTime = System.currentTimeMillis();
String message = String.format("Hi, %s From svc1, time : %d", hellorequest.getName(), currentTime);
HelloReply helloReply = new HelloReply();
helloReply.setMessage(message);
return helloReply;
}
}
```
如上图,该实现类实现了接口 com.guosen.zebra.sample.start.svc1.service.HelloService,并且添加了 **@ZebraService** 注解,以便对外暴露服务。
**注意** : 一个微服务只能有一个被 **@ZebraService** 注解的类,也就是对外暴露 gRPC 接口只能通过一个 Service 类来,不能通过多个 Service 类暴露。
3.修改App.java的配置
将
```java
@ZebraConf(confName="com.guosen.examples.service.HelloService")
```
修改为
```java
@ZebraConf(confName="com.guosen.zebra.sample.start.svc1.service.HelloService")
```
最终代码如下
```java
package com.guosen;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.guosen.zebra.ZebraRun;
import com.guosen.zebra.core.grpc.anotation.ZebraConf;
@SpringBootApplication
@ZebraConf(confName="com.guosen.zebra.sample.start.svc1.service.HelloService")
public class App {
public static void main(String[] args) throws Exception {
ZebraRun.run(args, App.class,false);
}
}
```
## 打包
执行如下命令,打包微服务。
```bash
mvn clean package -P prod
```
- 简介
- 入门
- Docker方式
- 手工方式
- 环境搭建
- 简述
- 初始化服务器
- 安装 Etcd
- 初始化数据库
- 安装配置中心
- 安装服务中心
- 安装监控中心
- 安装API网关
- 开发第一个微服务
- 简述
- 准备工作
- 接口定义
- 实现
- 配置
- 部署
- 验证
- 微服务开发
- 服务调用
- 服务上下文
- 日志
- 高级特性
- 范化调用
- 异步调用
- ACL 控制
- 慢启动
- 消息大小
- 组件使用
- 简述
- 缓存
- MyBatis
- RocketMQ
- 分库分表
- 读写分离
- 分布式事务
- 分布式锁
- 运维管理
- 服务依赖
- 服务查询
- 服务方法查询
- 配置中心
- API网关配置
- 流量控制
- 简述
- 限流
- 熔断
- 系统保护
- 白名单
- 黑名单
- 监控
- 主动探测
- 调用链
- 日志开关
- 最佳实践
- 常见问题
- 深入 Zebra
- 架构
- 通信协议
- 路标