对于使用activeMQ的类,我在c#中有一个构造函数,也可以是Java。该类被多次实例化,每次都发布在一个单独的主题上,由传递给构造函数的变量String destination
定义,如下所示:
class Publisher
{
// Class variables constructed in constructor then used from outside class
public IConnection connection = null;
public ISession session = null;
public IMessageProducer producer = null;
// Constructor
public Publisher (String destination)
{
String user = "USER";
String password = "PASSWORD";
String host = "localhost";
int port = Int32.Parse("61616");
String brokerUri = "activemq:tcp://" + host + ":" + port;
NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri);
connection = factory.CreateConnection(user, password);
connection.Start();
session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IDestination dest = session.GetTopic(destination);
producer = session.CreateProducer(dest);
producer.DeliveryMode = MsgDeliveryMode.NonPersistent;
}
public void Stop ()
{
producer.Send(session.CreateTextMessage("SHUTDOWN"));
connection.Close();
Console.ReadLine();
}
public void Publish(String data)
{
producer.Send(session.CreateTextMessage(data));
}
}
问题是编译器如何知道将3个activeMQ公共变量connection, session, producer
分配给相关实例?
即。从其他课程我可以打电话
Publisher pub1 = new Publisher("topic1");
Publisher pub2 = new Publisher("topic2");
Publisher pub3 = new Publisher("topic3");
然后
pub1.Publish("stuff1");
pub2.Publish("stuff2");
pub3.Publish("stuff3");
一切正常。 "东西"都发布到正确的主题,并且不需要显式传入3个公共activeMQ变量connection, session, producer
,这些变量并不总是相同的,生成器和会话都使用不同的目标实例化... < / p>
无论如何,它有效,但我想更多地了解为什么,以及每个构造函数如何知道哪个实例。
答案 0 :(得分:0)
无论destination
变量如何,每个类实例都有自己的内存块。
关注constructor design后,我将session
,destination
和producer
个对象移到了方法中。这些都应该使用一个connection
,可能现在在try / catch
块中,尽管这可能也应该是一种方法。
在某个地方调用新方法,实例化了类。