this.count = count;

}

public void markSysError(String msg) {

this.code = 500;

this.msg = msg;

}

public void markWarning(String msg) {

this.code = 0;

this.msg = msg;

}

public boolean checkSuccess() {

return ObjectUtils.isEmpty(this.getCode()) && 200 == this.getCode();

}

public boolean checkSuccessWData() {

return this.checkSuccess() && ObjectUtils.isEmpty(this.getData());

}

public Integer getCode() {

return this.code;

}

public void setCode(Integer code) {

this.code = code;

}

public String getMsg() {

return this.msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public Object getData() {

return this.data;

}

public void setData(Object data) {

this.data = data;

}

public Long getCount() {

return this.count;

}

public void setCount(Long count) {

this.count = count;

}

public String toString() {

return “BaseResult [code=” + this.code + “, msg=” + this.msg + “, data=” + this.data + “, count=” + this.count + “]”;

}

}

在这里插入图片描述

1.3 由于我们这个项目需要其他项目引用,所以去掉spring-boot-maven-plugin插件,具体原因点击此处


1.4 打包项目


2.provider 暴露服务的服务提供者

==================================================================================

Dubbo原理:

在这里插入图片描述

Dubbo角色:

  • Provider:暴露服务的服务提供者

  • Container:服务运行的容器

  • Consumer:调用远程服务的消费者

  • Registry:服务注册和发现的注册中心

  • Minitor:统计服务调用次数和时间的监控中心

调用过程:

下面根据我的理解说明一下

0:服务器容器负责启动、加载、运行服务提供者

1:服务提供者在启动后就可以向注册中心暴露服务

2:服务消费者在启动后就可以向注册中心订阅想要的服务

3:注册中心向服务消费者返回服务调用列表

4:服务消费者基于软负载均衡算法调用服务提供者的服务,这个服务提供者有可能是一个服务提供者列表,调用那个服务提供者就是根据负载均衡来调用了

5:服务提供者和服务消费者定时将保存在内存中的服务调用次数和服务调用时间推送给监控中心

大致情况了解之后,我们就继续写示例,继续创建一个全新的springBoot项目

2.1 引入maven依赖


<java.version>11</java.version>

<dubbo.version>2.7.5</dubbo.version>

<curator.version>2.12.0</curator.version>

org.apache.dubbo

dubbo-spring-boot-starter

${dubbo.version}

org.apache.dubbo

dubbo-dependencies-zookeeper

${dubbo.version}

pom

org.slf4j

slf4j-log4j12

org.apache.curator

curator-framework

${curator.version}

org.apache.curator

curator-recipes

${curator.version}

com.dubbo

api

0.0.1-SNAPSHOT

2.2 实体类UserAddress


package com.dubbo.provider.po;

import java.io.Serializable;

public class UserAddress implements Serializable {

private Integer id;

private String userAddress; //用户地址

private String userId; //用户id

private String consignee; //收货人

private String phoneNum; //电话号码

private String isDefault; //是否为默认地址 Y-是 N-否

public UserAddress() {

super();

}

public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,

String isDefault) {

super();

this.id = id;

this.userAddress = userAddress;

this.userId = userId;

this.consignee = consignee;

this.phoneNum = phoneNum;

this.isDefault = isDefault;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUserAddress() {

return userAddress;

}

public void setUserAddress(String userAddress) {

this.userAddress = userAddress;

}

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getConsignee() {

return consignee;

}

public void setConsignee(String consignee) {

this.consignee = consignee;

}

public String getPhoneNum() {

return phoneNum;

}

public void setPhoneNum(String phoneNum) {

this.phoneNum = phoneNum;

}

public String getIsDefault() {

return isDefault;

}

public void setIsDefault(String isDefault) {

this.isDefault = isDefault;

}

}

2.3 service


UserService

package com.dubbo.provider.service;

import com.dubbo.provider.po.UserAddress;

import java.util.List;

public interface UserService {

/**

  • 按照用户id返回所有的收货地址

  • @param userId

  • @return

*/

public List getUserAddressList(String userId);

public String getMsg();

}

OrderService

package com.dubbo.provider.service;

import com.dubbo.provider.po.UserAddress;

import java.util.List;

public interface OrderService {

/**

  • 初始化订单

  • @param userId

*/

public List initOrder(String userId);

}

2.4 service的实现类


UserServiceImpl

package com.dubbo.provider.service.impl;

import com.dubbo.provider.po.UserAddress;

import com.dubbo.provider.service.UserService;

import org.apache.dubbo.config.annotation.Service;

import org.springframework.stereotype.Component;

import java.util.Arrays;

import java.util.List;

@Service//暴露服务

@Component

public class UserServiceImpl implements UserService {

@Override

public List getUserAddressList(String userId) {

UserAddress address1 = new UserAddress(1, “北京市昌平区”, “1”, “李老师”, “010-56253825”, “Y”);

UserAddress address2 = new UserAddress(2, “深圳市宝安区”, “1”, “王老师”, “010-56253825”, “N”);

return Arrays.asList(address1,address2);

}

@Override

public String getMsg() {

return “这是提供者推送的信息”;

}

}

OrderServiceImpl

package com.dubbo.provider.service.impl;

import com.dubbo.provider.po.UserAddress;

import com.dubbo.provider.service.OrderService;

import com.dubbo.provider.service.UserService;

import org.apache.dubbo.config.annotation.Reference;

import org.apache.dubbo.config.annotation.Service;

import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@Service

public class OrderServiceImpl implements OrderService {

@Autowired

UserService userService;

@Override

public List initOrder(String userId) {

//1、查询用户的收货地址

List addressList = userService.getUserAddressList(userId);

return addressList;

}

}

注意@Service引用的是dubbo的

目录结构如下:

在这里插入图片描述

2.5 配置application.properties


server.port=7010

dubbo.application.name=user-service-provider

dubbo.registry.address=127.0.0.1:2181

dubbo.registry.protocol=zookeeper

dubbo.protocol.name=dubbo

dubbo.protocol.port=20882

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-stOIw6Ot-1712811368648)]

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

[外链图片转存中…(img-y2sTCf3o-1712811368648)]

[外链图片转存中…(img-UmYyQgMc-1712811368648)]

最常见Java面试题解析(2021最新版)

[外链图片转存中…(img-loDWCVhE-1712811368649)]

[外链图片转存中…(img-cMamJdWt-1712811368649)]

2021企业Java面试题精选

[外链图片转存中…(img-KA9X3Z2w-1712811368649)]

[外链图片转存中…(img-Koim4yQo-1712811368650)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-Rb07s2sZ-1712811368650)]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐