P2P(点对点)
p2p的过程理解起来更加简单。它好比是两个人打电话,这两个人是独享这一条通信链路的。一方发送消息,另外一方接收,就这么简单。在实际应用中因为有多个用户对使用p2p的链路,它的通信场景如下图所示:
publish-subscribe 发布订阅模式
发布订阅模式有点类似于我们日常生活中订阅报纸。每年到年尾的时候,邮局就会发-本报纸集
合让我们来选择订阅哪一个。在这个表里头列了所有出版发行的报纸,那么对于我们每-一个订阅
者来说,我们可以选择- - 份或者多份报纸。比如北京日报、潇湘晨报等。那么这些个我们订阅的
报纸就相当于发布订阅模式里的topic。有很多个人订阅报纸,也有人可能和我订阅了相同的报
纸。那么在这里相当于我们在同-一个topic 里注册了。对于一份报纸发行方来说,它和所有的订
阅者就构成了一一个1对多的关系。这种关系如下图所示:
public class Publish {
I
private ConnectionFactory factory;
private Connection connection;
private Session session;
private MessageProducer producer;
public Publish(){
try
factory = new ActiveMQConnectionFactory (
//ActiveMQConnection . DEFAULT USER,
//ActiveMQConnection. DEFAULT PASSWORD,
‘’bhz”,”bhz’”
"tcp://localhost:61616");
connection = factory. createConnection ();
connection. start();
session = connection. createsession (false, Session . AUTO ACKNOWLEDGE) ;
producer = session. crea teProducer (nu11) ;
} catch (Exception e) {
e.printstackTrace();
}
public void sendMessage() throws Exception{
Destination destination = session. createTopic("topicI"); //变化的位置
TextMessage textMassge = session. crea teTextMessage ("我是内容");
Producer.send (des tination, textMassge) ;
}
pub1ic static void main (String[] args) throws Exception{
Publish P = new Publish() ;
P. sencMessage ();
}
}
public Consumer () {
this . connectionFactory = new ActiveMQConnectionFactory (
"bhz", //ActiveMQConnectionFac tory. DEFAULT USER,
"bhz",//ActiveMQConnectionFactory. DEFAULT PASSWORD,
"tcp://localhost: 61616");
this. connection = this. connectionFactory. createConnection () ;
this . connection.start() ;
this.session = this. connection. createsession (Boolean . False, Session . AUTO ACKNOWLEDGE) ;
} catch (JMSException e) {
e.printstackTrace () ;
}
public void receiver() {
try {
Destination destination = session. createTopic("topicI"); //变化的位置
consumer = session. crea teConsumer (des tination) ;
consumer. setMessageLis tener (new Listener());
} catch (JMSException e) {
e.printstackTrace() ;
)
}
class Listener implements MessageLi stener {
@override
public void onMessage (Message message) {
try {
TextMessage msg = (TextMessage) messageConsumer.receive();
System. out.printIn (msg );
}
} catch
(JMSException e) {
e .printstackTrace();
}
I
}
}
public static void main (string[]args) {
Consumer c = new Consumer ();
c.receiver();
}
}