# bluevally-user
**Repository Path**: aming0502/bluevally-user
## Basic Information
- **Project Name**: bluevally-user
- **Description**: demo project
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-01-10
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# bluevally-user
#### 介绍
微服务演示项目
调用者:com.bluevally.microservice.user.main.Client
服务者:com.bluevally.microservice.user.main.User
调用者定义文件:client.properties
被调用者定义文件:user.properties
演示中client向User发送了一个用户注册信息,User微服务通过查询数据库判断,如果用户存在,则返回用户已经存在信息,否则返回注册成功。
#### 文件定义说明:
```
#注册中心地址
register.address=127.0.0.1:10001
#定义要注册的服务名称
service.ip=127.0.0.1
service.publish.name=user:5001:0.1
#定义依赖的服务
service.dependency.names=user:0.1,virtual:0.2
#定义链路跟踪的服务地址
#service.v2url=http://localhost:9411/api/v2/spans
```
#### 开发流程
- 在项目的${project.basedir}/src/main/proto下面编写proto文件
- 配置proto文件自动生成java代码的maven插件。
```
org.xolstice.maven.plugins
protobuf-maven-plugin
0.5.0
true
${project.basedir}/src/main/proto
${project.build.sourceDirectory}
false
${project.build.directory}/protoc-dependencies
com.google.protobuf:protoc:3.6.1:exe:${os.detected.classifier}
grpc-java
io.grpc:protoc-gen-grpc-java:1.17.0:exe:${os.detected.classifier}
compile
compile-custom
```
- 运行插件的compile生成通信用的java对象,compile-custom生成grpc调用的java对象。
- 配置服务定义文件,规则,服务名称.properties
- 编写服务入口文件:
作为客户端调用别的服务的:
```java
//获取channel工厂
ChannelFactory factory = ChannelFactory.getInstance();
factory.init("client.properties");
channel = factory.buildChannel("user");
//生成调用代理
UserServiceGrpc.UserServiceBlockingStub blockingStub = UserServiceGrpc.newBlockingStub(channel);
//可把调用代理放到运行上下文中,其功能类似于bean-container
AppContext.addBean("userServiceBlockingStub",blockingStub);
AppContext.addBean("channel",channel);
```
作为服务端提供服务的:
```java
//生成提供服务的代理类
UserServiceImpl userService = AppContext.proxyBindService(UserServiceImpl.class);
ChannelFactory factory = ChannelFactory.getInstance();
factory.init("user.properties");
//把提供服务的代理类注入server中,然后启动server
factory.startServer(userService);
```
- 服务实现类的编写
对于要提供服务的方法,要加入@AutoConnection的注解,这样代理程序就能自动在线程上下文中生成一个唯一的数据库连接。
也可以通过`ThreadLocalHolder.autoHoldDbConn();`来手动在线程上下文中设置一个数据库连接,但是别忘了使用`ThreadLocalHolder.unHoldDbConn();`
进行连接的释放。
- 自动生成数据库entity文件的插件的使用
需要在pom文件中定义:
```xml
com.bluevalley.framework.mydb.generator
mydb-generator-maven-plugin
1.0-SNAPSHOT
jdbc:mysql://127.0.0.1:3306/test
root
lxm2214
/Users/lixiaoming/mywork/bluevally/user/src/main/java/com/bluevally/microservice/user/entity
com.bluevally.microservice.user.entity
Entity
acl_sid
generate file
clean
mydb-generator
```
其中url定义数据库地址,user定义数据库用户名,pwd定义数据库密码,fileDir定义生成entity文件的目录,packageName定义生成文件的包名,table_name定义要生成entity文件的表名
运行mydb-generator则执行生产entity文件。