idea下用maven创建并搭建dubbox微服务环境项目(二)——开发provider
第一篇链接地址:https://blog.csdn.net/gaofengyan/article/details/85156496
今天继续Windows10系统下用idea工具创建maven多模块管理的dubbo(dubbox)+zookeeper中间件分布式架构SSM项目环境搭建,provider的开发。
1. 新建一个module smbms-user-provider
2. 增加jar包依赖
----------------------------------以下是dubbo------------------------------------------
1)zookeeper jar包 (中间件的)
和注册中心通信的公共基础包。
[code]<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency>
2)zkclient jar包 (中间件的)
和注册中心通信的客户端包。
[code]<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency>
3)dubbo jar包
dubbo 发布服务与订阅服务的包。
[code]<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> </dependency>
4)smbms-common 公共包
公共的实体类与service接口。
[code]<dependency> <groupId>cn.kgc1803</groupId> <artifactId>smbms-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
5)hessian jar包
hesian 提供中间通信协议(http ,dubbo等协议)
[code]<dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.7</version> </dependency>
--------------------------dubbox 的 jar 依赖------------------------------
6)json 插件 jar包 在smbms-common模块pom.xml引入
[code]<!-- json 插件 --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency>
该插件的作用是在实体类上增加了@JsonProperty注解标签的属性会自动转化为json对象属性。
示例:
[code] @JsonProperty private Integer id;
按照这种方式,我们对smbms-common模块的order类进行了改造改造后需要再次打包发布,直接覆盖原来的文件,如下:
[code]package cn.kgc1803.smbms_common.pojo; import org.codehaus.jackson.annotate.JsonProperty; import java.io.Serializable; public class Order implements Serializable { //@JsonProperty实体类可以自动转化为 json 类对象数据的属性 @JsonProperty private Integer id; @JsonProperty private Integer ownerUserId; @JsonProperty private String productName; @JsonProperty private Double price; @JsonProperty private Integer amount; public Order(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getOwnerUserId() { return ownerUserId; } public void setOwnerUserId(Integer ownerUserId) { this.ownerUserId = ownerUserId; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Integer getAmount() { return amount; } public void setAmount(Integer amount) { this.amount = amount; } }
7)rest 风格访问dubbo(dubbox) 在smbms-user-provider模块pom.xml引入
[code]<!--dubbox rest 风格包 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-rpc-rest</artifactId> <version>2.8.4</version> </dependency>
3. 编写smbms-user-provider模块的service
配置 dubbox rest 风格的访问配置:
[code] //@Produces设置输出结果集的数据类型 @Path("/order") @Produces(ContentType.APPLICATION_JSON_UTF_8) public class OrderServiceImpl implements OrderService { //@Path访问路径 @Path("/orderliset.html") //@GET请求方式 @GET public List<Order> findList() {
以上代码块中的方法:public List<Order> findList() 在实际开发中会带上参数,因此,为了灵活运用,方法上的@path后面应该灵活设置成从参数中获取的参数字段,例如后续贴出相应的改进后的代码。并且这两种方式在启动dubbox测试的时候会有细微区别如下面第7)步操作。
改进后的OrderServiceImpl类:
[code]package cn.kgc1803.smbms_user_provider.service; import cn.kgc1803.smbms_common.pojo.Order; import cn.kgc1803.smbms_common.service.OrderService; import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import java.util.ArrayList; import java.util.List; //@Produces设置输出结果集的 数据类型 @Path("/order") @Produces(ContentType.APPLICATION_JSON_UTF_8) public class OrderServiceImpl implements OrderService { //@Path访问路径 //@GET请求方式 @Path("/orderlist/{userId}") @GET public List<Order> findList(@PathParam("userId") Integer userId) { List<Order> orders = new ArrayList<Order>(); Order o = new Order(); o.setId(userId); o.setOwnerUserId(11); o.setAmount(33); o.setPrice(55.3); o.setProductName("华为p8"); orders.add(o); return orders; } }
4. 配置dubbo 发布到服务(spring)
用idea工具新建spring 配置文件 dubbo_user_provider.xml,如下方式:
1)在配置文件中增加命名空间dubbo
[code]xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
2)注入service 配置到spring中
[code] <!--service 注入--> <bean id="userService" class="cn.kgc1803.smbms_user_provider.service.UserServiceImpl"/> <bean id="orderService" class="cn.kgc1803.smbms_user_provider.service.OrderServiceImpl"/>
3)利用dubbo 命名空间配置应用名称(name:应用名称;owner:拥有者;organization:组织)
[code]<!-- 设置提供者本次发布的应用名称--> <dubbo:application name="user_provider_app" owner="kgc" organization="kgc1803"/>
4)配置注册中心的地址
[code]<!-- 配置注册中心地址--> <dubbo:registry address="zookeeper://localhost:2181"/>
5)声明一个发布协议(选择自己的协议风格 dubbo或者rest;rest风格有端口号)
[code] <!-- 配置一个协议(dubbo协议) --> <dubbo:protocol name="dubbo" contextpath="dubbo" />
[code] <!--rest 协议 --> <dubbo:protocol name="rest" port="20888"/>
6)发布服务----》两种风格(通过第5步定义的协议):protocol:协议风格;interface:对应的接口;ref:对象,即第1)步service对应的 id 。
[code]<!-- dubbo方式发布服务 --> <dubbo:service protocol="dubbo" interface="cn.kgc1803.smbms_common.service.UserService" ref="userService" />
[code]<!-- rest 协议发布风格 --> <dubbo:service protocol="rest" interface="cn.kgc1803.smbms_common.service.OrderService" ref="orderService"/>
7)编写测试类TestProvider,加载spring配置文件,页面启动bubbox测试:
[code]import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestProvider { public static void main(String[] args){ //加载spring配置文件 ApplicationContext ctx = new ClassPathXmlApplicationContext("dubbo_user_provider.xml"); try { //线程休眠10分钟,保证测试启动后,dubbo服务可使用的时间 Thread.sleep(10*60*1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
8)为了启动测试类能更好的在控制台显示日志效果,方便我们对项目的报错进行查看和修改,这里我添加了一个配置文件,不需要你写,只需要在之前解压的zookeeper包里面找到,并复制到smbms-user-provider模块的resource下即可:
log4j.properties配置文件:
[code]# Define some default values that can be overridden by system properties zookeeper.root.logger=INFO, CONSOLE zookeeper.console.threshold=INFO zookeeper.log.dir=. zookeeper.log.file=zookeeper.log zookeeper.log.threshold=DEBUG zookeeper.tracelog.dir=. zookeeper.tracelog.file=zookeeper_trace.log # # ZooKeeper Logging Configuration # # Format is "<default threshold> (, <appender>)+ # DEFAULT: console appender only log4j.rootLogger=${zookeeper.root.logger} # Example with rolling log file #log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE # Example with rolling log file and tracing #log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE # # Log INFO level and above messages to the console # log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold} log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n # # Add ROLLINGFILE to rootLogger to get log file output # Log DEBUG level and above messages to a log file log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file} # Max log file size of 10MB log4j.appender.ROLLINGFILE.MaxFileSize=10MB # uncomment the next line to limit number of backup files #log4j.appender.ROLLINGFILE.MaxBackupIndex=10 log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n # # Add TRACEFILE to rootLogger to get log file output # Log DEBUG level and above messages to a log file log4j.appender.TRACEFILE=org.apache.log4j.FileAppender log4j.appender.TRACEFILE.Threshold=TRACE log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file} log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout ### Notice we are including log4j's NDC here (%x) log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n
9)同样启动:http://localhost:8080/dubbo-admin-2.8.4/ 网址,查看首页是否有发布的监控中心:
列表详细信息:
10)启动测试(启动上面第7)步的测试即可进入网页查看服务是否发布成功)
dubbox测试:http://localhost:20888/order/orderlist.html (这种方式,每个系统都可以访问;这里的20888端口号是第5步的rest协议端口,order和orderlist.html是提供者实现类头部的注解路径,相当于controller的方式。)或者是带参数的方式(即service类对应的@path路径):http://localhost:20888/order/orderlist/{userId}
测试通过,证明之前写的OrderServiceImpl实现类的findList方法已通在smbms-common模块引入json 插件(依赖架包),并在Order实体类属性字段上增加的@JsonProperty注解标签会自动转化为json对象属性显示在前端页面上。这样也好为后面页面用Ajax请求后端数据做铺垫。
今天的任务就到此吧,有点疲惫了,还要继续补充知识,后面再接着更新!
- idea下用maven创建并搭建dubbox微服务环境项目(三)——开发consume
- idea下用maven创建并搭建dubbox微服务环境项目(四)——整理spring+mybaties(注解)
- idea下用maven创建并搭建dubbox微服务环境项目(五)—综合整理及总结
- idea下用spring boot(maven的升级版)搭建SSM微服务环境项目
- MAVEN环境搭建和IDEA创建MAVEN项目
- Java WEB开发环境搭建以及创建Maven Web项目
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合 一、搭建开发环境 1.1、使用Maven创建Web项目 执行如下命令: mvn archetype:create
- idea+spring boot+dubbox搭建微服务SSM框架环境项目(maven-图文并解)
- 用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)
- idea Maven项目的搭建 无法创建java类的解决方案
- cocos2d-x 3.0游戏开发xcode5环境的搭建以及项目创建
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目
- cocos2d-x 3.0游戏开发xcode5环境的搭建以及项目创建
- Springboot整合Dubbo - 项目创建和环境搭建
- struts2开发环境的搭建与第一个项目的创建
- spark Idea Maven开发环境搭建
- Maven+druid+MyBatis+Spring+Oracle+Dubbo开发环境搭建
- Ionic2开发环境搭建、项目创建调试与Android应用的打包、优化
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目