Dubbo開發,利用項目模擬提供者和消費者之間的調用--初學
阿新 • • 發佈:2018-12-06
開發 tro ping gist 虛擬 put tst con keep
開發工具:IDEA,虛擬機 VMware Workstation
預備工作:安裝好zookeeper的虛擬機,電腦jdk更換為1.7,本地tomcat啟動,能夠訪問以下頁面即可進行開發
2.建立以下springboot工程,關系圖如下
1.首先打包父工程wk-parent,把需要的公共依賴導入,供其他項目依賴
2.打包pojo項目wk-pojo,實體類全部實現序列化
3.以上兩個都打jar包即可,接下來整合接口項目wk-interface,只是單純的接口即可,供提供者業務層實現
4.開發提供者wk-dubbo
a.service實現類代碼
@Service(version="1.0.0")
public class UserService implements IUserService {
@Autowired
private UserDao userDao;
@Override
public User loginAdmin(User user) {
return userDao.loginAdmin(user);
}
@Override
public WitkeyUser login(WitkeyUser witkeyUser) {
return userDao.login(witkeyUser);
}
}
b.application.properties
server.port=8013
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/weike?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
# 應用名稱
spring.dubbo.application.name=provider
#註冊中心地址
spring.dubbo.registry.address=zookeeper://192.168.17.130:2181
#協議名稱
spring.dubbo.protocol.name=dubbo
#協議端口
spring.dubbo.protocol.port=20880
#服務類包目錄
spring.dubbo.scan=com.buba.weike.dubbo.wkdubbo.service.impl
#打印mybatis日誌信息
logging.level.com.buba.weike.dubbo.wkdubbo.dao=debug
5.開發消費者,把接口打包,加入項目依賴中,並註入到消費者service層的實現類中
a.application.properties
## 避免和 server 工程端口沖突
server.port=8081
spring.mvc.view.prefix=/jsps/
spring.mvc.view.suffix=.jsp
## Dubbo 服務消費者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://192.168.17.130:2181
spring.dubbo.scan=com.buba.weike.duboo.wkmanager.service
b.UserConsumer 代碼
@Component
public class UserConsumer implements IUserConsumer {
@Reference(version="1.0.0")
IUserService iUserService;
public User loginAdmin(User user) {
return iUserService.loginAdmin(user);
}
}
c.controller代碼
@Controller
@RequestMapping("/user")
public class userController {
@Autowired
private IUserConsumer userService;
//登錄
@ResponseBody
@RequestMapping("/loginAdmin")
public Map<String,String> loginAjax(User user, String code,HttpSession session){
Map<String,String> map=new HashMap<String,String>();
String codet=(String)session.getAttribute("verCode");
if(codet==null){
map.put("flag","false");
map.put("messages","請輸入驗證碼!");
}
if(codet!=null && codet.equalsIgnoreCase(code)){
map.put("flag","true");
map.put("messages","驗證碼正確!");
}
if(codet!=null && !codet.equalsIgnoreCase(code)){
map.put("flag","false");
map.put("messages","驗證碼錯誤!");
}
User us =userService.loginAdmin(user);
if(us!=null){
session.setAttribute("user",us);
map.put("flag","true");
map.put("messages","登錄成功!");
}else{
map.put("flag","false");
map.put("messages","賬戶名或密碼錯誤!");
}
return map;
}
//生成圖片
@RequestMapping("/authImage")
public void authImage(HttpServletResponse response, HttpSession session) throws IOException {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
//生成隨機字串
String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
//存入會話session
//刪除以前的
session.removeAttribute("verCode");
session.setAttribute("verCode", verifyCode.toLowerCase());
//生成圖片
int w = 100, h = 30;
VerifyCodeUtils.outputImage(w, h, response.getOutputStream(), verifyCode);
}
}
6.出現以下頁面
提供者項目debug,sql語句信息
兩個消費者wk-partol和wk-manager,這兩個項目都是運行出現以下效果
總結:提供者提供所需接口,消費者去調用,開發分工更清晰,方便。
Dubbo開發,利用項目模擬提供者和消費者之間的調用--初學