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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
±ØÖª±Ø»áµÄRocketMQÏûÏ¢ÀàÐÍ
 
×÷ÕߣºÔÆÔ­Éúʵս
  2825  次浏览      30
 2020-3-25
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËRocketMQÏûÏ¢ÀàÐÍ£¬Ê×ÏȾÙÀý˵Ã÷ʲôÊÇÎÞÐòÏûÏ¢£¬Æä´Î½éÉÜÁËÓÐÐòÏûÏ¢ÊÇÈçºÎ±£Ö¤µÄ£¬×îºó½éÉÜÑÓʱÏûÏ¢µÄÉèÖÃÒÔ¼°Ó¦Óó¡¾°£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ¼òÊé,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

ÆÕͨÏûÏ¢

ÆÕͨÏûÏ¢Ò²½Ð×öÎÞÐòÏûÏ¢£¬¼òµ¥À´Ëµ¾ÍÊÇûÓÐ˳ÐòµÄÏûÏ¢£¬producer Ö»¹Ü·¢ËÍÏûÏ¢£¬consumer Ö»¹Ü½ÓÊÕÏûÏ¢£¬ÖÁÓÚÏûÏ¢ºÍÏûÏ¢Ö®¼äµÄ˳Ðò²¢Ã»Óб£Ö¤£¬¿ÉÄÜÏÈ·¢Ë͵ÄÏûÏ¢ÏÈÏû·Ñ£¬Ò²¿ÉÄÜÏÈ·¢Ë͵ÄÏûÏ¢ºóÏû·Ñ¡£

¾Ù¸ö¼òµ¥Àý×Ó£¬producer ÒÀ´Î·¢ËÍ order id Ϊ 1¡¢2¡¢3 µÄÏûÏ¢µ½ broker£¬consumer ½Óµ½µÄÏûϢ˳ÐòÓпÉÄÜÊÇ 1¡¢2¡¢3£¬Ò²ÓпÉÄÜÊÇ 2¡¢1¡¢3 µÈÇé¿ö£¬Õâ¾ÍÊÇÆÕͨÏûÏ¢¡£

ÒòΪ²»ÐèÒª±£Ö¤ÏûÏ¢µÄ˳Ðò£¬ËùÒÔÏûÏ¢¿ÉÒÔ´ó¹æÄ£²¢·¢µØ·¢ËͺÍÏû·Ñ£¬ÍÌÍÂÁ¿ºÜ¸ß£¬Êʺϴ󲿷ֳ¡¾°¡£

´úÂëʾÀý£º

Éú²úÕß

public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
//ÉùÃ÷²¢³õʼ»¯Ò»¸öproducer
//ÐèÒªÒ»¸öproducer groupÃû×Ö×÷Ϊ¹¹Ôì·½·¨µÄ²ÎÊý£¬ÕâÀïΪconcurrent_producer
DefaultMQProducer producer = new DefaultMQProducer("concurrent_producer");


//ÉèÖÃNameServerµØÖ·,´Ë´¦Ó¦¸ÄΪʵ¼ÊNameServerµØÖ·£¬
¶à¸öµØÖ·Ö®¼äÓã»·Ö¸ô
//NameServerµÄµØÖ·±ØÐëÓУ¬µ«ÊÇÒ²¿ÉÒÔͨ¹ý»·¾³±äÁ¿µÄ
·½Ê½ÉèÖ㬲»Ò»¶¨·ÇµÃдËÀÔÚ´úÂëÀï
producer.setNamesrvAddr("10.1.54.121:9876;10.1.54.
122 :9876");

//µ÷ÓÃstart()·½·¨Æô¶¯Ò»¸öproducerʵÀý
producer.start();
//·¢ËÍ10ÌõÏûÏ¢µ½TopicΪTopicTest£¬tagΪTagA£¬ÏûÏ¢ÄÚÈÝΪ¡°Hello RocketMQ¡±Æ´½ÓÉÏiµÄÖµ
for (int i = 0; i < 10; i++) {
try {
Message msg = new Message("TopicTestConcurrent",// topic
"TagA",// tag
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)// body
);
//µ÷ÓÃproducerµÄsend()·½·¨·¢ËÍÏûÏ¢
//ÕâÀïµ÷ÓõÄÊÇͬ²½µÄ·½Ê½£¬ËùÒÔ»áÓзµ»Ø½á¹û£¬
ͬʱĬÈÏ·¢Ë͵ÄÒ²ÊÇÆÕͨÏûÏ¢
SendResult sendResult = producer.send(msg);
//´òÓ¡·µ»Ø½á¹û£¬¿ÉÒÔ¿´µ½ÏûÏ¢·¢Ë͵Ä״̬ÒÔ¼°Ò»Ð©Ïà¹ØÐÅÏ¢
System.out.println(sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
//·¢ËÍÍêÏûÏ¢Ö®ºó£¬µ÷ÓÃshutdown()·½·¨¹Ø±Õproducer
producer.shutdown();
}
}

Ïû·ÑÕß

public class Consumer {
public static void main(String[] args) throws
InterruptedException, MQClientException
//ÉùÃ÷²¢³õʼ»¯Ò»¸öconsumer
//ÐèÒªÒ»¸öconsumer groupÃû×Ö×÷Ϊ¹¹Ôì·½·¨µÄ²ÎÊý£¬
ÕâÀïΪconcurrent_consumer
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("concurrent_consumer");
//ͬÑùÒ²ÒªÉèÖÃNameServerµØÖ·
consumer.setNamesrvAddr("10.1.54.121:9876;10.1 .54 .122 : 9876");
//ÕâÀïÉèÖõÄÊÇÒ»¸öconsumerµÄÏû·Ñ²ßÂÔ
//CONSUME_FROM_LAST_OFFSET
ĬÈϲßÂÔ£¬´Ó¸Ã¶ÓÁÐ×îβ¿ªÊ¼Ïû·Ñ£¬¼´Ìø¹ýÀúÊ·ÏûÏ¢
//CONSUME_FROM_FIRST_OFFSET
´Ó¶ÓÁÐ×ʼ¿ªÊ¼Ïû·Ñ£¬¼´ÀúÊ·ÏûÏ¢£¨»¹´¢´æÔÚbrokerµÄ£©
È«²¿Ïû·ÑÒ»±é
//CONSUME_FROM_TIMESTAMP
´Óij¸öʱ¼äµã¿ªÊ¼Ïû·Ñ£¬ºÍsetConsumeTimestamp()ÅäºÏʹÓã¬
ĬÈÏÊǰë¸öСʱÒÔǰ
consumer.setConsumeFromWhere(ConsumeFromWhere.
CONSUME_FROM_FIRST_OFFSET);
//ÉèÖÃconsumerËù¶©ÔĵÄTopicºÍTag£¬*´ú±íÈ«²¿µÄTag
consumer.subscribe("TopicTestConcurrent", "*");
//ÉèÖÃÒ»¸öListener£¬Ö÷Òª½øÐÐÏûÏ¢µÄÂß¼­´¦Àí
//×¢ÒâÕâÀïʹÓõÄÊÇMessageListenerConcurrentlyÕâ¸ö½Ó¿Ú
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
//·µ»ØÏû·Ñ״̬
//CONSUME_SUCCESS Ïû·Ñ³É¹¦
//RECONSUME_LATER Ïû·Ñʧ°Ü£¬ÐèÒªÉÔºóÖØÐÂÏû·Ñ
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//µ÷ÓÃstart()·½·¨Æô¶¯consumer
consumer.start();
System.out.println("Consumer Started.");
}
}

ÓÐÐòÏûÏ¢

ÓÐÐòÏûÏ¢¾ÍÊǰ´ÕÕÒ»¶¨µÄÏȺó˳ÐòµÄÏûÏ¢ÀàÐÍ¡£

¾Ù¸öÀý×ÓÀ´Ëµ£¬producer ÒÀ´Î·¢ËÍ order id Ϊ 1¡¢2¡¢3 µÄÏûÏ¢µ½ broker£¬consumer ½Óµ½µÄÏûϢ˳ÐòÒ²¾ÍÊÇ 1¡¢2¡¢3 £¬¶ø²»»á³öÏÖÆÕͨÏûÏ¢ÄÇÑùµÄ 2¡¢1¡¢3 µÈÇé¿ö¡£

ÄÇôÓÐÐòÏûÏ¢ÊÇÈçºÎ±£Ö¤µÄÄØ£¿ÎÒÃǶ¼ÖªµÀÏûÏ¢Ê×ÏÈÓÉ producer µ½ broker£¬ÔÙ´Ó broker µ½ consumer£¬·ÖÕâÁ½²½×ß¡£ÄÇôҪ±£Ö¤ÏûÏ¢µÄÓÐÐò£¬ÊƱØÕâÁ½²½¶¼ÊÇÒª±£Ö¤ÓÐÐòµÄ£¬¼´Òª±£Ö¤ÏûÏ¢Êǰ´ÓÐÐò·¢Ë͵½ broker£¬broker Ò²ÊÇÓÐÐò½«ÏûϢͶµÝ¸ø consumer£¬Á½¸öÌõ¼þ±ØÐëͬʱÂú×㣬ȱһ²»¿É¡£

½øÒ»²½»¹¿ÉÒÔ½«ÓÐÐòÏûÏ¢·Ö³É

1.È«¾ÖÓÐÐòÏûÏ¢

2.¾Ö²¿ÓÐÐòÏûÏ¢

֮ǰÎÒÃǽ²¹ý£¬topic Ö»ÊÇÏûÏ¢µÄÂß¼­·ÖÀ࣬ÄÚ²¿ÊµÏÖÆäʵÊÇÓÉ queue ×é³É¡£µ± producer °ÑÏûÏ¢·¢Ë͵½Ä³¸ö topic ʱ£¬Ä¬ÈÏÊÇ»áÏûÏ¢·¢Ë͵½¾ßÌåµÄ queue ÉÏ¡£

È«¾ÖÓÐÐò

¾Ù¸öÀý×Ó£¬producer ·¢ËÍ order id Ϊ 1¡¢2¡¢3¡¢4 µÄËÄÌõÏûÏ¢µ½ topicA ÉÏ£¬¼ÙÉè topicA µÄ queue ÊýΪ 3 ¸ö£¨queue0¡¢queue1¡¢queue2£©£¬ÄÇôÏûÏ¢µÄ·Ö²¼¿ÉÄܾÍÊÇÕâÖÖÇé¿ö£¬id Ϊ 1 µÄÔÚ queue0£¬id Ϊ 2 µÄÔÚ queue1£¬id Ϊ 3 µÄÔÚ queue2£¬id Ϊ 4 µÄÔÚ queue0¡£Í¬ÑùµÄ£¬consumer Ïû·ÑʱҲÊǰ´ queue È¥Ïû·Ñ£¬Õâʱºò¾Í¿ÉÄܳöÏÖÏÈÏû·Ñ 1¡¢4£¬ÔÙÏû·Ñ 2¡¢3£¬ºÍÎÒÃǵÄÔ¤ÆÚ²»·û¡£ÄÇôÎÒÃÇÈçºÎʵÏÖ 1¡¢2¡¢3¡¢4 µÄÏû·Ñ˳ÐòÄØ£¿µÀÀíÆäʵºÜ¼òµ¥£¬Ö»ÐèÒª°Ñ¶©µ¥ topic µÄ queue Êý¸ÄΪ 1£¬Èç´ËÒ»À´£¬Ö»Òª producer °´ÕÕ 1¡¢2¡¢3¡¢4 µÄ˳ÐòÈ¥·¢ËÍÏûÏ¢£¬ÄÇô consumer ×ÔȻҲ¾Í°´ÕÕ 1¡¢2¡¢3¡¢4 µÄ˳ÐòÈ¥Ïû·Ñ£¬Õâ¾ÍÊÇÈ«¾ÖÓÐÐòÏûÏ¢¡£

ÓÉÓÚÒ»¸ö topic Ö»ÓÐÒ»¸ö queue £¬¼´Ê¹ÎÒÃÇÓжà¸ö producer ʵÀýºÍ consumer ʵÀýÒ²ºÜÄÑÌá¸ßÏûÏ¢ÍÌÍÂÁ¿¡£¾ÍºÃ±È¹ý¶ÀľÇÅ£¬´ó¼ÒÖ»ÄÜÒ»¸ö°¤×ÅÒ»¸ö¹ýÈ¥£¬Ð§ÂʵÍÏ¡£

ÄÇôÓÐûÓÐÍÌÍÂÁ¿ºÍÓÐÐòÖ®¼äÕÛÖеķ½°¸ÄØ£¿ÆäʵÊÇÓе쬾ÍÊǾֲ¿ÓÐÐòÏûÏ¢¡£

¾Ö²¿ÓÐÐò

ÎÒÃÇÖªµÀ¶©µ¥ÏûÏ¢¿ÉÒÔÔÙϸ·ÖΪ¶©µ¥´´½¨¡¢¶©µ¥¸¶¿î¡¢¶©µ¥Íê³ÉµÈÏûÏ¢£¬ÕâЩÏûÏ¢¶¼ÓÐÏàͬµÄ order id¡£Í¬Ê±£¬Ò²Ö»Óа´ÕÕ¶©µ¥´´½¨¡¢¶©µ¥¸¶¿î¡¢¶©µ¥Íê³ÉµÄ˳ÐòÈ¥Ïû·Ñ²Å·ûºÏÒµÎñÂß¼­¡£µ«ÊDz»Í¬ order id µÄÏûÏ¢ÊÇ¿ÉÒÔ²¢Ðе쬲»»áÓ°Ïìµ½ÒµÎñ¡£Õâʱºò¾Í³£¼û×ö·¨¾ÍÊǽ« order id ½øÐд¦Àí£¬½« order id ÏàͬµÄÏûÏ¢·¢Ë͵½ topicB µÄͬһ¸ö queue£¬¼ÙÉèÎÒÃÇ topicB ÓÐ 2 ¸ö queue£¬ÄÇôÎÒÃÇ¿ÉÒÔ¼òµ¥µÄ¶Ô id È¡Óà£¬ÆæÊýµÄ·¢Íù queue0£¬Å¼ÊýµÄ·¢Íù queue1£¬Ïû·ÑÕß°´ÕÕ queue È¥Ïû·Ñʱ£¬¾ÍÄܱ£Ö¤ queue0 ÀïÃæµÄÏûÏ¢ÓÐÐòÏû·Ñ£¬queue1 ÀïÃæµÄÏûÏ¢ÓÐÐòÏû·Ñ¡£

ÓÉÓÚÒ»¸ö topic ¿ÉÒÔÓжà¸ö queue£¬ËùÒÔÔÚÐÔÄܱÈÈ«¾ÖÓÐÐò¸ßµÃ¶à¡£¼ÙÉè queue ÊýÊÇ n£¬ÀíÂÛÉÏÐÔÄܾÍÊÇÈ«¾ÖÓÐÐòµÄ n ±¶£¬µ±È» consumer Ò²Òª¸ú×ÅÔö¼Ó²ÅÐС£ÔÚʵ¼ÊÇé¿öÖУ¬ÕâÖÖ¾Ö²¿ÓÐÐòÏûÏ¢ÊÇ»á±ÈÈ«¾ÖÓÐÐòÏûÏ¢Óõĸü¶à¡£

ʾÀý´úÂ룺

Éú²úÕß

public class Producer {
public static void main(String[] args) throws UnsupportedEncodingException {
try {
// ÉùÃ÷²¢³õʼ»¯Ò»¸öproducer
// ÐèÒªÒ»¸öproducer groupÃû×Ö×÷Ϊ¹¹Ôì·½·¨µÄ²ÎÊý£¬ÕâÀïΪordered_producer
DefaultMQProducer orderedProducer = new DefaultMQProducer("ordered_producer");
// ÉèÖÃNameServerµØÖ·,´Ë´¦Ó¦¸ÄΪʵ¼ÊNameServerµØÖ·£¬
¶à¸öµØÖ·Ö®¼äÓã»·Ö¸ô
//NameServerµÄµØÖ·±ØÐëÓУ¬µ«ÊÇÒ²¿ÉÒÔͨ¹ý»·¾³±äÁ¿µÄ·½Ê½ÉèÖã¬
²»Ò»¶¨·ÇµÃдËÀÔÚ´úÂëÀï
orderedProducer.setNamesrvAddr("10.1.54.121:
9876;10.1.54.122:9876");
// µ÷ÓÃstart()·½·¨Æô¶¯Ò»¸öproducerʵÀý
orderedProducer.start();
// ×Ô¶¨ÒåÒ»¸ötagÊý×é
String[] tags = new String[]{"TagA", "TagB",
"TagC", "TagD", "TagE"};
// ·¢ËÍ10ÌõÏûÏ¢µ½TopicΪTopicTestOrdered£¬tag
ΪtagsÊý×鰴˳Ðòȡֵ£¬
// keyֵΪ¡°KEY¡±Æ´½ÓÉÏiµÄÖµ£¬ÏûÏ¢ÄÚÈÝΪ
¡°Hello RocketMQ¡±Æ´½ÓÉÏiµÄÖµ
for (int i = 0; i < 10; i++) {
int orderId = i % 10;
Message msg =
new Message("TopicTestOrdered", tags[i % tags.
length], "KEY" + i,
("Hello RocketMQ " + i).getBytes(RemotingHelper.
DEFAULT_CHARSET));
SendResult sendResult = orderedProducer.send(msg, new MessageQueueSelector() {
// Ñ¡Ôñ·¢ËÍÏûÏ¢µÄ¶ÓÁÐ
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
// argµÄÖµÆäʵ¾ÍÊÇorderId
Integer id = (Integer) arg;
// mqsÊǶÓÁм¯ºÏ£¬Ò²¾ÍÊÇtopicËù¶ÔÓ¦µÄËùÓжÓÁÐ
int index = id % mqs.size();
// ÕâÀï¸ù¾ÝÇ°ÃæµÄid¶Ô¶ÓÁм¯ºÏ´óСÇóÓàÀ´·µ»ØËù¶ÔÓ¦µÄ¶ÓÁÐ
return mqs.get(index);
}
}, orderId);
System.out.println(sendResult);
}
orderedProducer.shutdown();
} catch (MQClientException e) {
e.printStackTrace();
} catch (RemotingException e) {
e.printStackTrace();
} catch (MQBrokerException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

ÖÁÓÚÊÇҪʵÏÖÈ«¾ÖÓÐÐò£¬»¹ÊǾֲ¿ÓÐÐò£¬ÔÚ´ËʾÀý´úÂëÖУ¬¾ÍÈ¡¾öÓÚ TopicTestOrdered Õâ¸ö Topic µÄ¶ÓÁÐÊýÁË¡£

Ïû·ÑÕß

public class Consumer {
public static void main(String[] args) throws
MQClientException {
//ÉùÃ÷²¢³õʼ»¯Ò»¸öconsumer
//ÐèÒªÒ»¸öconsumer groupÃû×Ö×÷Ϊ¹¹Ôì·½·¨µÄ²ÎÊý£¬
ÕâÀïΪconcurrent_consumer
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ordered_consumer");
//ͬÑùÒ²ÒªÉèÖÃNameServerµØÖ·
consumer.setNamesrvAddr("10.1.54.121:9876;10.1.54 .122:9876");
//ÕâÀïÉèÖõÄÊÇÒ»¸öconsumerµÄÏû·Ñ²ßÂÔ
//CONSUME_FROM_LAST_OFFSET ĬÈϲßÂÔ£¬´Ó¸Ã¶ÓÁÐ×îβ¿ªÊ¼Ïû·Ñ£¬
¼´Ìø¹ýÀúÊ·ÏûÏ¢
//CONSUME_FROM_FIRST_OFFSET ´Ó¶ÓÁÐ×ʼ¿ªÊ¼Ïû·Ñ£¬
¼´ÀúÊ·ÏûÏ¢£¨»¹´¢´æÔÚbrokerµÄ£©È«²¿Ïû·ÑÒ»±é
//CONSUME_FROM_TIMESTAMP ´Óij¸öʱ¼äµã¿ªÊ¼Ïû·Ñ£¬
ºÍsetConsumeTimestamp()ÅäºÏʹÓã¬Ä¬ÈÏÊǰë¸öСʱÒÔǰ
consumer.setConsumeFromWhere(ConsumeFromWhere.
CONSUME_FROM_FIRST_OFFSET);
//ÉèÖÃconsumerËù¶©ÔĵÄTopicºÍTag
consumer.subscribe("TopicTestOrdered", "TagA || TagC || TagD");
//ÉèÖÃÒ»¸öListener£¬Ö÷Òª½øÐÐÏûÏ¢µÄÂß¼­´¦Àí
//×¢ÒâÕâÀïʹÓõÄÊÇMessageListenerOrderlyÕâ¸ö½Ó¿Ú
consumer.registerMessageListener(new MessageListenerOrderly() {
@Override
public ConsumeOrderlyStatus consumeMessage ( List <MessageExt> msgs, ConsumeOrderlyContext context) {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
//·µ»ØÏû·Ñ״̬
//SUCCESS Ïû·Ñ³É¹¦
//SUSPEND_CURRENT_QUEUE_A_MOMENT Ïû·Ñʧ°Ü£¬ÔÝÍ£µ±Ç°¶ÓÁеÄÏû·Ñ
return ConsumeOrderlyStatus.SUCCESS;
}
});
//µ÷ÓÃstart()·½·¨Æô¶¯consumer
consumer.start();
System.out.println("Consumer Started.");
}
}

ÑÓʱÏûÏ¢

ÑÓʱÏûÏ¢£¬¼òµ¥À´Ëµ¾ÍÊǵ± producer ½«ÏûÏ¢·¢Ë͵½ broker ºó£¬»áÑÓʱһ¶¨Ê±¼äºó²ÅͶµÝ¸ø consumer ½øÐÐÏû·Ñ¡£

RcoketMQµÄÑÓʱµÈ¼¶Îª£º1s£¬5s£¬10s£¬30s£¬1m£¬2m£¬3m£¬4m£¬5m£¬6m£¬7m£¬8m£¬9m£¬10m£¬20m£¬30m£¬1h£¬2h¡£level=0£¬±íʾ²»ÑÓʱ¡£level=1£¬±íʾ 1 ¼¶ÑÓʱ£¬¶ÔÓ¦ÑÓʱ 1s¡£level=2 ±íʾ 2 ¼¶ÑÓʱ£¬¶ÔÓ¦5s£¬ÒÔ´ËÀàÍÆ¡£

ÕâÖÖÏûÏ¢Ò»°ãÊÊÓÃÓÚÏûÏ¢Éú²úºÍÏû·ÑÖ®¼äÓÐʱ¼ä´°¿ÚÒªÇóµÄ³¡¾°¡£±ÈÈç˵ÎÒÃÇÍø¹ºÊ±£¬Ïµ¥Ö®ºóÊÇÓÐÒ»¸öÖ§¸¶Ê±¼ä£¬³¬¹ýÕâ¸öʱ¼äδ֧¸¶£¬ÏµÍ³¾ÍÓ¦¸Ã×Ô¶¯¹Ø±Õ¸Ã±Ê¶©µ¥¡£ÄÇôÔÚ¶©µ¥´´½¨µÄʱºò¾Í»á¾ÍÐèÒª·¢ËÍÒ»ÌõÑÓʱÏûÏ¢£¨ÑÓʱ15·ÖÖÓ£©ºóͶµÝ¸ø consumer£¬consumer ½ÓÊÕÏûÏ¢ºóÔÙ¶Ô¶©µ¥µÄÖ§¸¶×´Ì¬½øÐÐÅжÏÊÇ·ñ¹Ø±Õ¶©µ¥¡£

ÉèÖÃÑÓʱ·Ç³£¼òµ¥£¬Ö»ÐèÒªÔÚMessageÉèÖöÔÓ¦µÄÑÓʱ¼¶±ð¼´¿É¡£

   
2825 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

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

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

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù