±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜ 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 |
ÊÚȨ
È»ºóͨ¹ý½Å±¾Æô¶¯·þÎñ¡£
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µÄÓ³Éä¹ØÏµ£¡
|