柚子快報邀請碼778899分享:java Dubbo學(xué)習(xí)
柚子快報邀請碼778899分享:java Dubbo學(xué)習(xí)
系列文章目錄
JavaSE基礎(chǔ)知識、數(shù)據(jù)類型學(xué)習(xí)萬年歷項目代碼邏輯訓(xùn)練習(xí)題代碼邏輯訓(xùn)練習(xí)題方法、數(shù)組學(xué)習(xí)圖書管理系統(tǒng)項目面向?qū)ο缶幊蹋悍庋b、繼承、多態(tài)學(xué)習(xí)封裝繼承多態(tài)習(xí)題常用類、包裝類、異常處理機制學(xué)習(xí)集合學(xué)習(xí)IO流、多線程學(xué)習(xí)倉庫管理系統(tǒng)JavaSE項目員工管理系統(tǒng)、多表查詢、反射實現(xiàn)DBHelper學(xué)習(xí)DML、DDL、數(shù)據(jù)庫對象學(xué)習(xí)JavaWeb網(wǎng)絡(luò)編程、各種標簽、CSS學(xué)習(xí)ECMAScript、BOM學(xué)習(xí)DOM、jQuery學(xué)習(xí)Servlet、JSP、Cookie、Ajax學(xué)習(xí)融資管理系統(tǒng)JavaWeb項目框架MyBatis框架學(xué)習(xí)逆向工程、Spring框架IOC、AOP學(xué)習(xí)SpringMVC框架學(xué)習(xí)SpringBoot框架學(xué)習(xí)招聘網(wǎng)站框架項目Vue介紹、窗體內(nèi)操作、窗體間操作學(xué)習(xí)Vue路由配置、網(wǎng)絡(luò)請求訪問框架項目、element組件介紹學(xué)習(xí)標準管理系統(tǒng)Vue項目微服務(wù)Linux安裝、Nginx反向代理、負載均衡學(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的主要特點和優(yōu)勢3. Dubbo與OpenFeign相比4. 項目架構(gòu)
二、Dubbo環(huán)境配置1. 啟動Nacos與Redis環(huán)境
三、創(chuàng)建dubboapi項目1. 創(chuàng)建Maven項目2. 添加依賴3. 創(chuàng)建Score實體類4. 創(chuàng)建ResultCode工具類5. 創(chuàng)建Result工具類6. 創(chuàng)建ScoreService接口7. 打包
四、創(chuàng)建dubboconsumer項目1. 創(chuàng)建Maven項目2. 添加依賴3. 創(chuàng)建SessionConfig配置類5. 創(chuàng)建User實體類6. 創(chuàng)建UserService接口7. 創(chuàng)建UserServiceImpl實現(xiàn)類9. 創(chuàng)建UserController控制器10. 創(chuàng)建SpringBootMain啟動類創(chuàng)建application.properties配置文件創(chuàng)建application.yml配置文件創(chuàng)建bootstrap.yml配置文件
五、創(chuàng)建dubboprovider項目1. 創(chuàng)建Maven項目2. 添加依賴3. 創(chuàng)建SessionConfig配置類4. 創(chuàng)建ScoreServiceImpl實現(xiàn)類5. 創(chuàng)建SpringBootMain啟動類6. 創(chuàng)建application.properties配置文件7. 創(chuàng)建application.yml配置文件8. 創(chuàng)建bootstrap.yml配置文件9. 啟動程序
總結(jié)
前言
本文我們要講述: Dubbo 在下攸攸太上,這是我的二維碼?。
一、Dubbo介紹
1. Dubbo介紹
Dubbo是一個開源的高性能微服務(wù)框架,由阿里巴巴開發(fā)并后來捐贈給了Apache基金會。它提供了一種高效、可靠的RPC(遠程過程調(diào)用)通信框架,用于構(gòu)建分布式的服務(wù)化架構(gòu)。
2. Dubbo的主要特點和優(yōu)勢
高性能:Dubbo通過優(yōu)化網(wǎng)絡(luò)通信、序列化、線程池等方面的機制,提供了高性能的服務(wù)調(diào)用能力,適用于高并發(fā)、低延遲的場景。 可擴展性:Dubbo支持多種協(xié)議、負載均衡、服務(wù)注冊與發(fā)現(xiàn)等擴展點,可以根據(jù)需求擴展和定制化。 高可用性:Dubbo提供了服務(wù)治理、負載均衡、故障轉(zhuǎn)移等機制,確保服務(wù)的高可用性和容錯能力。 透明化的遠程調(diào)用:Dubbo對服務(wù)調(diào)用進行了封裝,使得調(diào)用方無需關(guān)注底層的網(wǎng)絡(luò)通信細節(jié),可以像調(diào)用本地方法一樣調(diào)用遠程服務(wù)。 配置管理:Dubbo提供了豐富的配置管理功能,可以通過配置中心進行動態(tài)的配置管理和版本控制。 監(jiān)控和管理:Dubbo提供了豐富的監(jiān)控和管理功能,可以對服務(wù)進行監(jiān)控、統(tǒng)計和管理。
3. Dubbo與OpenFeign相比
與OpenFeign相比,Dubbo是基于RPC協(xié)議實現(xiàn)的微服務(wù)框架,而OpenFeign是基于HTTP請求的方式實現(xiàn)的。Dubbo的通信方式更加高效和靈活,適用于復(fù)雜的微服務(wù)場景。而OpenFeign是Spring官方提供的工具,更加簡潔易用,適合于快速開發(fā)和集成Spring Boot項目。
4. 項目架構(gòu)
在應(yīng)用Dubbo框架時,通常需要創(chuàng)建三個工程:API工程、消費者工程和提供者工程。API工程是共享的代碼庫,包含服務(wù)接口和共享的實體類等。消費者工程和提供者工程可以引用API工程,通過Dubbo框架實現(xiàn)服務(wù)的調(diào)用和提供。
二、Dubbo環(huán)境配置
1. 啟動Nacos與Redis環(huán)境
docker start nacos
docker start redis-6379
三、創(chuàng)建dubboapi項目
1. 創(chuàng)建Maven項目
2. 添加依賴
3. 創(chuàng)建Score實體類
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, "請求成功"),
ERROR(1, "請求失敗"),
;
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項目
1. 創(chuàng)建Maven項目
2. 添加依賴
我們可以看到,依賴中導(dǎo)入了dubboapi項目的jar包,這樣我們就可以在此項目中使用dubboapi編寫的類
dubboapi-1.0-SNAPSHOT.jar可能爆紅,多導(dǎo)入幾次,實在不行就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實體類
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實現(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啟動類
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 #是要訪問的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ù)制過來即可。
shared-configs:
- data-id: redissession1.yaml # 配置詳情內(nèi):Data ID,粘貼復(fù)制過來即可。
group: DEFAULT_GROUP # 配置詳情內(nèi):Group 粘貼復(fù)制過來即可。
inetutils:
preferred-networks: 192.168.56 # 服務(wù)管理內(nèi),public內(nèi)點擊詳情,可以查看,需要項目啟動后能查看,一般默認192.168.56
五、創(chuàng)建dubboprovider項目
1. 創(chuàng)建Maven項目
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實現(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啟動類
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 #指定把哪一個包下面的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ù)制過來即可。
shared-configs:
- data-id: redissession1.yaml # 配置詳情內(nèi):Data ID,粘貼復(fù)制過來即可。
group: DEFAULT_GROUP # 配置詳情內(nèi):Group 粘貼復(fù)制過來即可。
inetutils:
preferred-networks: 192.168.56 # 服務(wù)管理內(nèi),public內(nèi)點擊詳情,可以查看,需要項目啟動后能查看,一般默認192.168.56
9. 啟動程序
必須先啟動consumer項目,再啟動provider項目 啟動postman發(fā)送請求 選擇GET請求,輸入http://127.0.0.1:100/user地址,點擊send 出現(xiàn)請求成功字樣即為成功。
總結(jié)
本文講述了: Dubbo:實現(xiàn)項目間通信 在下攸攸太上,我都寫了四十多篇文章了,確實有點編不出來了!嗚嗚!
柚子快報邀請碼778899分享:java Dubbo學(xué)習(xí)
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。