一、目录结构
顾名思义,boot-meet-service-consumer是作为消费者,boot-user-service-provider作为服务提供者,meeting-interface用于存放接口和bean。
二、meeting-interface
这里Meeting
private String id;
private String pcode;
private String title;
private String content;
private String uid;
private User user;
User
private String id;
private String name;
private String phonenum;
MeetingPubService:
package com.rong.service;
import com.rong.bean.Meeting;
public interface MeetingPubService {
/**
* 根据会议编号查询详细信息
*/
Meeting selectMeetingByPcode(String pcode);
}
UserService:
public interface UserService {
User selectUserById(String id);
}
三、Provider和Consumer都需要的依赖
<!--引入meeting-interface的依赖 -->
<dependency>
<groupId>com.rong</groupId>
<artifactId>meeting-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--引入dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
四、provider
目录结构
UserServiceImpl
package com.rong.boot.service.impl;
import com.rong.bean.User;
import com.rong.service.UserService;
import org.springframework.stereotype.Component;
@com.alibaba.dubbo.config.annotation.Service//暴露服务
@Component
public class UserServiceImpl implements UserService {
/**
* 根据用户名查找用户信息
* @param id
* @return
*/
public User selectUserById(String id) {
User user = new User(id,"jack","1326364386");
return user;
}
}
BootUserServiceProviderApplication
package com.rong.boot;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo//开启基于注解的dubbo功能
@SpringBootApplication
public class BootUserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(BootUserServiceProviderApplication.class, args);
}
}
provider的application.properties
dubbo.application.name=boot-user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry
五、Consumer
目录结构
MeetingController
package com.rong.boot.controller;
import com.rong.bean.Meeting;
import com.rong.service.MeetingPubService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MeetingController {
@Autowired
MeetingPubService meetingPubService;
@GetMapping("/meeting")
public String getMeeting(){
Meeting meeting = meetingPubService.selectMeetingByPcode("123");
System.out.println(meeting);
return "ok";
}
}
MeetingPubServiceImpl
package com.rong.boot.service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.rong.bean.Meeting;
import com.rong.bean.User;
import com.rong.service.MeetingPubService;
import com.rong.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class MeetingPubServiceImpl implements MeetingPubService {
@Reference
UserService userService;
public Meeting selectMeetingByPcode(String pcode) {
System.out.println("传进来的pcode"+pcode);
Meeting meeting = new Meeting();
meeting.setId("1001");
meeting.setPcode(pcode);
meeting.setTitle("学习dubbo");
meeting.setContent("Dubbo真好玩");
meeting.setUid("123");
User user = userService.selectUserById(meeting.getUid());
meeting.setUser(user);
return meeting;
}
}
application.properties
server.port=8082
dubbo.application.name=boot-meeting-service-consumer
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.monitor.protocol=registry
六、测试
打开浏览器,在地址栏中输入localhost:8082/meeting出现下图所示就成功了