柚子快報(bào)邀請(qǐng)碼778899分享:java Dubbo學(xué)習(xí)
柚子快報(bào)邀請(qǐng)碼778899分享:java Dubbo學(xué)習(xí)
系列文章目錄
JavaSE基礎(chǔ)知識(shí)、數(shù)據(jù)類型學(xué)習(xí)萬(wàn)年歷項(xiàng)目代碼邏輯訓(xùn)練習(xí)題代碼邏輯訓(xùn)練習(xí)題方法、數(shù)組學(xué)習(xí)圖書(shū)管理系統(tǒng)項(xiàng)目面向?qū)ο缶幊蹋悍庋b、繼承、多態(tài)學(xué)習(xí)封裝繼承多態(tài)習(xí)題常用類、包裝類、異常處理機(jī)制學(xué)習(xí)集合學(xué)習(xí)IO流、多線程學(xué)習(xí)倉(cāng)庫(kù)管理系統(tǒng)JavaSE項(xiàng)目員工管理系統(tǒng)、多表查詢、反射實(shí)現(xiàn)DBHelper學(xué)習(xí)DML、DDL、數(shù)據(jù)庫(kù)對(duì)象學(xué)習(xí)JavaWeb網(wǎng)絡(luò)編程、各種標(biāo)簽、CSS學(xué)習(xí)ECMAScript、BOM學(xué)習(xí)DOM、jQuery學(xué)習(xí)Servlet、JSP、Cookie、Ajax學(xué)習(xí)融資管理系統(tǒng)JavaWeb項(xiàng)目框架MyBatis框架學(xué)習(xí)逆向工程、Spring框架IOC、AOP學(xué)習(xí)SpringMVC框架學(xué)習(xí)SpringBoot框架學(xué)習(xí)招聘網(wǎng)站框架項(xiàng)目Vue介紹、窗體內(nèi)操作、窗體間操作學(xué)習(xí)Vue路由配置、網(wǎng)絡(luò)請(qǐng)求訪問(wèn)框架項(xiàng)目、element組件介紹學(xué)習(xí)標(biāo)準(zhǔn)管理系統(tǒng)Vue項(xiàng)目微服務(wù)Linux安裝、Nginx反向代理、負(fù)載均衡學(xué)習(xí)Docker學(xué)習(xí)Jenkins學(xué)習(xí)Nexus學(xué)習(xí)Spring Security學(xué)習(xí)RabbitMQ學(xué)習(xí)Redis學(xué)習(xí)MongoDB學(xué)習(xí)MongoDB學(xué)習(xí)Nacos學(xué)習(xí)Spring Session學(xué)習(xí)Spring Gateway學(xué)習(xí)JSR 303學(xué)習(xí)OpenFeign學(xué)習(xí)Dubbo學(xué)習(xí)Hystrix學(xué)習(xí)
文章目錄
系列文章目錄前言一、Dubbo介紹1. Dubbo介紹2. Dubbo的主要特點(diǎn)和優(yōu)勢(shì)3. Dubbo與OpenFeign相比4. 項(xiàng)目架構(gòu)
二、Dubbo環(huán)境配置1. 啟動(dòng)Nacos與Redis環(huán)境
三、創(chuàng)建dubboapi項(xiàng)目1. 創(chuàng)建Maven項(xiàng)目2. 添加依賴3. 創(chuàng)建Score實(shí)體類4. 創(chuàng)建ResultCode工具類5. 創(chuàng)建Result工具類6. 創(chuàng)建ScoreService接口7. 打包
四、創(chuàng)建dubboconsumer項(xiàng)目1. 創(chuàng)建Maven項(xiàng)目2. 添加依賴3. 創(chuàng)建SessionConfig配置類5. 創(chuàng)建User實(shí)體類6. 創(chuàng)建UserService接口7. 創(chuàng)建UserServiceImpl實(shí)現(xiàn)類9. 創(chuàng)建UserController控制器10. 創(chuàng)建SpringBootMain啟動(dòng)類創(chuàng)建application.properties配置文件創(chuàng)建application.yml配置文件創(chuàng)建bootstrap.yml配置文件
五、創(chuàng)建dubboprovider項(xiàng)目1. 創(chuàng)建Maven項(xiàng)目2. 添加依賴3. 創(chuàng)建SessionConfig配置類4. 創(chuàng)建ScoreServiceImpl實(shí)現(xiàn)類5. 創(chuàng)建SpringBootMain啟動(dòng)類6. 創(chuàng)建application.properties配置文件7. 創(chuàng)建application.yml配置文件8. 創(chuàng)建bootstrap.yml配置文件9. 啟動(dòng)程序
總結(jié)
前言
本文我們要講述: Dubbo 在下攸攸太上,這是我的二維碼?。
一、Dubbo介紹
1. Dubbo介紹
Dubbo是一個(gè)開(kāi)源的高性能微服務(wù)框架,由阿里巴巴開(kāi)發(fā)并后來(lái)捐贈(zèng)給了Apache基金會(huì)。它提供了一種高效、可靠的RPC(遠(yuǎn)程過(guò)程調(diào)用)通信框架,用于構(gòu)建分布式的服務(wù)化架構(gòu)。
2. Dubbo的主要特點(diǎn)和優(yōu)勢(shì)
高性能:Dubbo通過(guò)優(yōu)化網(wǎng)絡(luò)通信、序列化、線程池等方面的機(jī)制,提供了高性能的服務(wù)調(diào)用能力,適用于高并發(fā)、低延遲的場(chǎng)景。 可擴(kuò)展性:Dubbo支持多種協(xié)議、負(fù)載均衡、服務(wù)注冊(cè)與發(fā)現(xiàn)等擴(kuò)展點(diǎn),可以根據(jù)需求擴(kuò)展和定制化。 高可用性:Dubbo提供了服務(wù)治理、負(fù)載均衡、故障轉(zhuǎn)移等機(jī)制,確保服務(wù)的高可用性和容錯(cuò)能力。 透明化的遠(yuǎn)程調(diào)用:Dubbo對(duì)服務(wù)調(diào)用進(jìn)行了封裝,使得調(diào)用方無(wú)需關(guān)注底層的網(wǎng)絡(luò)通信細(xì)節(jié),可以像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)。 配置管理:Dubbo提供了豐富的配置管理功能,可以通過(guò)配置中心進(jìn)行動(dòng)態(tài)的配置管理和版本控制。 監(jiān)控和管理:Dubbo提供了豐富的監(jiān)控和管理功能,可以對(duì)服務(wù)進(jìn)行監(jiān)控、統(tǒng)計(jì)和管理。
3. Dubbo與OpenFeign相比
與OpenFeign相比,Dubbo是基于RPC協(xié)議實(shí)現(xiàn)的微服務(wù)框架,而OpenFeign是基于HTTP請(qǐng)求的方式實(shí)現(xiàn)的。Dubbo的通信方式更加高效和靈活,適用于復(fù)雜的微服務(wù)場(chǎng)景。而OpenFeign是Spring官方提供的工具,更加簡(jiǎn)潔易用,適合于快速開(kāi)發(fā)和集成Spring Boot項(xiàng)目。
4. 項(xiàng)目架構(gòu)
在應(yīng)用Dubbo框架時(shí),通常需要?jiǎng)?chuàng)建三個(gè)工程:API工程、消費(fèi)者工程和提供者工程。API工程是共享的代碼庫(kù),包含服務(wù)接口和共享的實(shí)體類等。消費(fèi)者工程和提供者工程可以引用API工程,通過(guò)Dubbo框架實(shí)現(xiàn)服務(wù)的調(diào)用和提供。
二、Dubbo環(huán)境配置
1. 啟動(dòng)Nacos與Redis環(huán)境
docker start nacos
docker start redis-6379
三、創(chuàng)建dubboapi項(xiàng)目
1. 創(chuàng)建Maven項(xiàng)目
2. 添加依賴
3. 創(chuàng)建Score實(shí)體類
package com.jjy.entry;
import lombok.Data;
import java.io.Serializable;
@Data
public class Score implements Serializable {
private String name;
private Double score;
}
4. 創(chuàng)建ResultCode工具類
package com.jjy.util;
public enum ResultCode {
SUCCESS(0, "請(qǐng)求成功"),
ERROR(1, "請(qǐng)求失敗"),
;
private int code;
private String message;
ResultCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
5. 創(chuàng)建Result工具類
package com.jjy.util;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class Result {
private Integer code;
private String message;
private Map
private Result() {
}
public static Result ok() {
Result r = new Result();
r.setCode(ResultCode.SUCCESS.getCode());
r.setMessage(ResultCode.SUCCESS.getMessage());
return r;
}
public static Result error() {
Result r = new Result();
r.setCode(ResultCode.ERROR.getCode());
r.setMessage(ResultCode.ERROR.getMessage());
return r;
}
public Result put(String key, Object value) {
map.put(key, value);
return this;
}
public Object get(String key) {
return map.get(key);
}
}
6. 創(chuàng)建ScoreService接口
package com.jjy.service;
import com.jjy.entry.Score;
import java.util.List;
public interface ScoreService {
public List
}
7. 打包
可以拿到dubboapi-1.0-SNAPSHOT.jar文件
四、創(chuàng)建dubboconsumer項(xiàng)目
1. 創(chuàng)建Maven項(xiàng)目
2. 添加依賴
我們可以看到,依賴中導(dǎo)入了dubboapi項(xiàng)目的jar包,這樣我們就可以在此項(xiàng)目中使用dubboapi編寫(xiě)的類
dubboapi-1.0-SNAPSHOT.jar可能爆紅,多導(dǎo)入幾次,實(shí)在不行就lib導(dǎo)入
3. 創(chuàng)建SessionConfig配置類
package com.jjy.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
@Configuration
public class SessionConfig {
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("JSESSIONID");
serializer.setCookiePath("/");
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
return serializer;
}
@Bean
public RedisSerializer
return new GenericJackson2JsonRedisSerializer();
}
}
5. 創(chuàng)建User實(shí)體類
package com.jjy.entry;
import lombok.Data;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Data
@EnableDubbo
public class User {
private String id;
private String name;
private String password;
private List
}
6. 創(chuàng)建UserService接口
package com.jjy.service;
import com.jjy.entry.User;
public interface UserService {
public User getinfo();
}
7. 創(chuàng)建UserServiceImpl實(shí)現(xiàn)類
package com.jjy.service.impl;
import com.jjy.entry.Score;
import com.jjy.service.ScoreService;
import com.jjy.entry.User;
import com.jjy.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.annotation.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Reference
private ScoreService scoreService;
@Override
public User getinfo() {
User user=new User();
user.setId("111");
user.setName("zhangsan");
user.setPassword("zs123");
List
user.setScoreList(list);
return user;
}
}
9. 創(chuàng)建UserController控制器
package com.jjy.controller;
import com.jjy.service.UserService;
import com.jjy.entry.User;
import com.jjy.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public Result getinfo(){
User user = userService.getinfo();
return Result.ok().put("data",user);
}
}
10. 創(chuàng)建SpringBootMain啟動(dòng)類
package com.jjy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@SpringBootApplication
@EnableRedisHttpSession
public class SpringBootMain {
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class,args);
}
}
創(chuàng)建application.properties配置文件
spring.application.name=dubbocon
創(chuàng)建application.yml配置文件
server:
port: 100
spring:
session:
store-type: redis
dubbo:
registry:
address: nacos://192.168.81.186:8848
cloud:
subscribed-services: dubbopro #是要訪問(wèn)的p工程的服務(wù)名
consumer:
check: false
創(chuàng)建bootstrap.yml配置文件
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.81.186:8848
config:
server-addr: 192.168.81.186:8848
file-extension: yaml
namespace: 7e56a725-f51a-4603-b421-49add0ae9c4b # 命名空間ID,粘貼復(fù)制過(guò)來(lái)即可。
shared-configs:
- data-id: redissession1.yaml # 配置詳情內(nèi):Data ID,粘貼復(fù)制過(guò)來(lái)即可。
group: DEFAULT_GROUP # 配置詳情內(nèi):Group 粘貼復(fù)制過(guò)來(lái)即可。
inetutils:
preferred-networks: 192.168.56 # 服務(wù)管理內(nèi),public內(nèi)點(diǎn)擊詳情,可以查看,需要項(xiàng)目啟動(dòng)后能查看,一般默認(rèn)192.168.56
五、創(chuàng)建dubboprovider項(xiàng)目
1. 創(chuàng)建Maven項(xiàng)目
2. 添加依賴
3. 創(chuàng)建SessionConfig配置類
package com.jjy.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
@Configuration
public class SessionConfig {
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("JSESSIONID");
serializer.setCookiePath("/");
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
return serializer;
}
@Bean
public RedisSerializer
return new GenericJackson2JsonRedisSerializer();
}
}
4. 創(chuàng)建ScoreServiceImpl實(shí)現(xiàn)類
package com.jjy.service.impl;
import com.jjy.entry.Score;
import com.jjy.service.ScoreService;
import org.apache.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ScoreServiceImpl implements ScoreService {
@Override
public List
List
for(int i=0;i<3;i++){
Score score=new Score();
score.setName("admin");
score.setScore(Math.random()*100);
list.add(score);
}
return list;
}
}
5. 創(chuàng)建SpringBootMain啟動(dòng)類
package com.jjy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@SpringBootApplication
@EnableRedisHttpSession
public class SpringBootMain {
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class,args);
}
}
6. 創(chuàng)建application.properties配置文件
spring.application.name=dubbopro
7. 創(chuàng)建application.yml配置文件
server:
port: 200
spring:
session:
store-type: redis
dubbo:
scan:
base-packages: com.jjy.service #指定把哪一個(gè)包下面的Servlet交給dubbo去管理。
protocol:
name: dubbo
port: -1
registry:
address: nacos://192.168.81.186:8848
cloud:
subscribed-services: ""
8. 創(chuàng)建bootstrap.yml配置文件
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.81.186:8848
config:
server-addr: 192.168.81.186:8848
file-extension: yaml
namespace: 7e56a725-f51a-4603-b421-49add0ae9c4b # 命名空間ID,粘貼復(fù)制過(guò)來(lái)即可。
shared-configs:
- data-id: redissession1.yaml # 配置詳情內(nèi):Data ID,粘貼復(fù)制過(guò)來(lái)即可。
group: DEFAULT_GROUP # 配置詳情內(nèi):Group 粘貼復(fù)制過(guò)來(lái)即可。
inetutils:
preferred-networks: 192.168.56 # 服務(wù)管理內(nèi),public內(nèi)點(diǎn)擊詳情,可以查看,需要項(xiàng)目啟動(dòng)后能查看,一般默認(rèn)192.168.56
9. 啟動(dòng)程序
必須先啟動(dòng)consumer項(xiàng)目,再啟動(dòng)provider項(xiàng)目 啟動(dòng)postman發(fā)送請(qǐng)求 選擇GET請(qǐng)求,輸入http://127.0.0.1:100/user地址,點(diǎn)擊send 出現(xiàn)請(qǐng)求成功字樣即為成功。
總結(jié)
本文講述了: Dubbo:實(shí)現(xiàn)項(xiàng)目間通信 在下攸攸太上,我都寫(xiě)了四十多篇文章了,確實(shí)有點(diǎn)編不出來(lái)了!嗚嗚!
柚子快報(bào)邀請(qǐng)碼778899分享:java Dubbo學(xué)習(xí)
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。