Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
SpringCloud-Ribbon[ÈëÃ۸Àý]
 
×÷ÕߣºÓû§4919348
  3023  次浏览      28
 2020-8-27
   
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜ Ribbon ÔÚ΢·þÎñÖеÄ×÷Ó㬲¢½áºÏÏîÄ¿°¸Àý½²½âRibbon ÖжÔÓÚ¼¯ÈºµÄ·þÎñ²ÉÓõĸºÔؾùºâµÄ²ßÂÔ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÔÆÉçÇø£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Ò»¡¢ Ribbon ÔÚ΢·þÎñÖеÄ×÷ÓÃ

1 ʲôÊÇ Ribbon

Ribbon ÊÇÒ»¸ö»ùÓÚ Http ºÍ TCP µÄ¿Í·þ¶Ë¸ºÔؾùºâ¹¤¾ß£¬ËüÊÇ»ùÓÚ Netflix Ribbon ʵÏֵġ£

Ëü²»Ïñ spring cloud ·þÎñ×¢²áÖÐÐÄ¡¢ÅäÖÃÖÐÐÄ¡¢API Íø¹ØÄÇÑù¶ÀÁ¢²¿Ê𣬵«ÊÇËü¼¸ºõ´æÔÚÓÚÿ¸ö spring cloud ΢·þÎñÖС£°üÀ¨ feign ÌṩµÄÉùÃ÷ʽ·þÎñµ÷ÓÃÒ²ÊÇ»ùÓڸà RibbonʵÏֵġ£

ribbon ĬÈÏÌṩºÜ¶àÖÖ¸ºÔؾùºâËã·¨£¬ÀýÈç ÂÖѯ¡¢Ëæ»ú µÈµÈ¡£ÉõÖÁ°üº¬×Ô¶¨ÒåµÄ¸ºÔؾùºâËã·¨¡£

2 Ribbon ½â¾öÁËʲôÎÊÌâ

Ëû½â¾ö²¢ÌṩÁË΢·þÎñµÄ¸ºÔؾùºâµÄÎÊÌâ¡£

¶þ¡¢ ¼¯ÖÐʽÓë½ø³ÌÄÚ¸ºÔؾùºâµÄÇø±ð

1 ¸ºÔؾùºâ½â¾ö·½°¸µÄ·ÖÀà

Ŀǰҵ½çÖ÷Á÷µÄ¸ºÔؾùºâ·½°¸¿É·Ö³ÉÁ½Àࣺ

µÚÒ»Àࣺ¼¯ÖÐʽ¸ºÔؾùºâ, ¼´ÔÚ consumer ºÍ provider Ö®¼äʹÓöÀÁ¢µÄ¸ºÔؾùºâÉèÊ©(¿ÉÒÔÊÇÓ²¼þ£¬Èç F5, Ò²¿ÉÒÔÊÇÈí¼þ£¬Èç nginx), ÓɸÃÉèÊ©¸ºÔð°Ñ ·ÃÎÊÇëÇó ͨ¹ýijÖÖ²ßÂÔת·¢ÖÁ provider£»

µÚ¶þÀࣺ½ø³ÌÄÚ¸ºÔؾùºâ£¬½«¸ºÔؾùºâÂß¼­¼¯³Éµ½ consumer£¬consumer ´Ó·þÎñ×¢²áÖÐÐÄ»ñÖªÓÐÄÄЩµØÖ·¿ÉÓã¬È»ºó×Ô¼ºÔÙ´ÓÕâЩµØÖ·ÖÐÑ¡Ôñ³öÒ»¸öºÏÊ浀 provider¡£Ribbon ¾ÍÊôÓÚºóÕߣ¬ËüÖ»ÊÇÒ»¸öÀà¿â£¬¼¯³ÉÓÚ consumer ½ø³Ì£¬consumer ͨ¹ýËüÀ´»ñÈ¡µ½ provider µÄµØÖ·¡£

2 Á½ÖÖ¸ºÔؾùºâ·½Ê½½á¹¹Í¼

Èý¡¢ Ribbon µÄÈëÃ۸Àý

Ribbon ÖжÔÓÚ¼¯ÈºµÄ·þÎñ²ÉÓõĸºÔؾùºâµÄ²ßÂÔĬÈϵÄÊÇÂÖѯ,±¾°¸ÀýµÄÏîÄ¿½á¹¹

1.provider

1.1½« provider ´ò°ü¡£²¿Êðµ½ linux »·¾³ÖÐ

1.2´´½¨Æô¶¯½Å±¾ server.sh

×¢ÒâÐÞ¸Ä JAR_NAME

#!/bin/bash

cd `dirname $0`

CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`

JAR_NAME="springcloud-eureka-ribbon-provider-0.0.1-SNAPSHOT.jar"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME

#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""

#SPRING_PROFILES_ACTIV="-Dspring.profiles.active=ÅäÖÃÎļþ±äÁ¿Ãû³Æ"
SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%..log

echo_help()
{
echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}

if [ -z $1 ];then
echo_help
exit 1
fi

if [ ! -d "$LOG_DIR" ];then
mkdir "$LOG_DIR"
fi

if [ ! -f "$LOG_PATH" ];then
touch "$LOG_DIR"
fi

if [ "$1" == "start" ];then

# check server
PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
exit 1
fi

echo "Starting the $JAR_NAME..."

# start
nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &

COUNT=0
while [ $COUNT -lt 1 ]; do
sleep 1
COUNT=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
if [ $COUNT -gt 0 ]; then
break
fi
done
PIDS=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
echo "${JAR_NAME} Started and the PID is ${PIDS}."
echo "You can check the log file in ${LOG_PATH} for details."

elif [ "$1" == "stop" ];then

PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
if [ -z "$PIDS" ]; then
echo "ERROR:The $JAR_NAME does not started!"
exit 1
fi

echo -e "Stopping the $JAR_NAME..."

for PID in $PIDS; do
kill $PID > /dev/null 2>&1
done

COUNT=0
while [ $COUNT -lt 1 ]; do
sleep 1
COUNT=1
for PID in $PIDS ; do
PID_EXIST=`ps --no-heading -p $PID`
if [ -n "$PID_EXIST" ]; then
COUNT=0
break
fi
done
done

echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
echo_help
exit 1
fi

ÊÚȨ

chmod 755 service.sh

È»ºóͨ¹ý½Å±¾Æô¶¯·þÎñ¡£

./service start

2.consumer

Ïû·ÑÕßÖ÷ÒªÊÇ×¢ÒâserviceÖеķþÎñµ÷Ó㬴úÂëÈçÏÂ

/**
* @program: springcloud-eureka-consumer
* @description: Óû§µÄÒµÎñ´¦Àí
* @author: ²¨²¨¿¾Ñ¼
* @create: 2019-05-28 17:43
*/
@Service
public class UserService {
/**
* ribbon ¸ºÔؾùºâ
* LoadBalancerClient ͨ¹ý·þÎñÃû³Æ¿ÉÒÔ»ñÈ¡¶ÔÓ¦µÄ·þÎñµÄÏà¹ØÐÅÏ¢ ip portµÈ
*/
@Autowired
private LoadBalancerClient loadBalancerClient;
public List<User> getUsers(){
// ServiceInstance ·â×°µÄÓзþÎñµÄ»ù±¾ÐÅÏ¢ IPºÍ¶Ë¿ÚµÈ
ServiceInstance si = this.loadBalancerClient.choose("eureka-ribbon-provider");
StringBuilder sb = new StringBuilder();
sb.append("http://")
.append(si.getHost())
.append(":")
.append(si.getPort())
.append("/user");
System.out.println("·þÎñµØÖ·:"+sb.toString());
// SpringMVC RestTemplate
RestTemplate rt = new RestTemplate();
ParameterizedTypeReference<List<User>> type = new ParameterizedTypeReference<List<User>>() {};
// ResponseEntity:·â×°ÁË·µ»ØÖµµÄÐÅÏ¢
ResponseEntity<List<User>> response = rt.exchange(sb.toString(), HttpMethod.GET,null,type);
List<User> list = response.getBody();
return list;
}
}

×¢ÒâÅäÖÃÎļþÖÐ×¢²áÖÐÐÄͬÑùÐèÒªÈÏÖ¤£¡

Æô¶¯Ïû·ÑÕߣ¬È»ºóÈ¥×¢²áÖÐÐIJ鿴

3.²âÊÔ

·ÃÎÊÏû·ÑÕßÌṩµÄ·þÎñ

¶à´Î·ÃÎʲ鿴¿ØÖÆÌ¨Êä³ö

ͨ¹ýÊä³öÎÒÃÇÄÜ·¢ÏÖ¸ºÔؾùºâÊÇͨ¹ýÂÖѯµÄ·½Ê½ÊµÏÖµÄ(ĬÈÏ)

×¢ÒâÔÚWindowsϵÄhostsÖÐÌí¼Ó¶ÔÓ¦µÄÖ÷»úÃûºÍipµÄÓ³Éä¹ØÏµ£¡

 
   
3023 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨ϵÄÊý¾ÝÖÎÀí
ÈçºÎÉè¼ÆÊµÊ±Êý¾Ýƽ̨£¨¼¼Êõƪ£©
´óÊý¾Ý×ʲú¹ÜÀí×ÜÌå¿ò¼Ü¸ÅÊö
Kafka¼Ü¹¹ºÍÔ­Àí
ELK¶àÖּܹ¹¼°ÓÅÁÓ
×îпγÌ
´óÊý¾Ýƽ̨´î½¨Óë¸ßÐÔÄܼÆËã
´óÊý¾Ýƽ̨¼Ü¹¹ÓëÓ¦ÓÃʵս
´óÊý¾ÝϵͳÔËά
´óÊý¾Ý·ÖÎöÓë¹ÜÀí
Python¼°Êý¾Ý·ÖÎö
³É¹¦°¸Àý
ijͨÐÅÉ豸ÆóÒµ PythonÊý¾Ý·ÖÎöÓëÍÚ¾ò
Ä³ÒøÐÐ È˹¤ÖÇÄÜ+Python+´óÊý¾Ý
±±¾© Python¼°Êý¾Ý·ÖÎö
ÉñÁúÆû³µ ´óÊý¾Ý¼¼Êõƽ̨-Hadoop
ÖйúµçÐÅ ´óÊý¾Ýʱ´úÓëÏÖ´úÆóÒµµÄÊý¾Ý»¯ÔËӪʵ¼ù