第一篇链接地址:https://blog.csdn.net/gaofengyan/article/details/85156496
今天继续Windows10系统下用idea工具创建maven多模块管理的dubbo(dubbox)+zookeeper中间件分布式架构SSM项目环境搭建,provider的开发。
----------------------------------以下是dubbo------------------------------------------
1)zookeeper jar包 (中间件的)
和注册中心通信的公共基础包。
org.apache.zookeeper
zookeeper
3.4.6
2)zkclient jar包 (中间件的)
和注册中心通信的客户端包。
com.101tec
zkclient
0.8
3)dubbo jar包
dubbo 发布服务与订阅服务的包。
com.alibaba
dubbo
2.8.4
4)smbms-common 公共包
公共的实体类与service接口。
cn.kgc1803
smbms-common
1.0-SNAPSHOT
5)hessian jar包
hesian 提供中间通信协议(http ,dubbo等协议)
com.caucho
hessian
4.0.7
--------------------------dubbox 的 jar 依赖------------------------------
6)json 插件 jar包 在smbms-common模块pom.xml引入
org.codehaus.jackson
jackson-mapper-asl
1.9.12
该插件的作用是在实体类上增加了@JsonProperty注解标签的属性会自动转化为json对象属性。
示例:
@JsonProperty
private Integer id;
按照这种方式,我们对smbms-common模块的order类进行了改造改造后需要再次打包发布,直接覆盖原来的文件,如下:
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引入
com.alibaba
dubbo-rpc-rest
2.8.4
配置 dubbox rest 风格的访问配置:
//@Produces设置输出结果集的数据类型
@Path("/order")
@Produces(ContentType.APPLICATION_JSON_UTF_8)
public class OrderServiceImpl implements OrderService {
//@Path访问路径
@Path("/orderliset.html")
//@GET请求方式
@GET
public List findList() {
以上代码块中的方法:public List
改进后的OrderServiceImpl类:
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 findList(@PathParam("userId") Integer userId) {
List orders = new ArrayList();
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;
}
}
用idea工具新建spring 配置文件 dubbo_user_provider.xml,如下方式:
1)在配置文件中增加命名空间dubbo
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
2)注入service 配置到spring中
3)利用dubbo 命名空间配置应用名称(name:应用名称;owner:拥有者;organization:组织)
4)配置注册中心的地址
5)声明一个发布协议(选择自己的协议风格 dubbo或者rest;rest风格有端口号)
6)发布服务----》两种风格(通过第5步定义的协议):protocol:协议风格;interface:对应的接口;ref:对象,即第1)步service对应的 id 。
7)编写测试类TestProvider,加载spring配置文件,页面启动bubbox测试:
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配置文件:
# 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: 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请求后端数据做铺垫。
今天的任务就到此吧,有点疲惫了,还要继续补充知识,后面再接着更新!
第三篇链接地址:https://blog.csdn.net/gaofengyan/article/details/85238542