MQ!Rabbit-client AMQImpl
程序员文章站
2022-03-01 22:07:57
AMQPImpl类包括AMQP接口(public class AMQImpl implements AMQP)主要囊括了AMQP协议中的通信帧的类别。在学习 channelN类的时候basicQos调用的类实际是AMQImpl的一个内部类的方法。下面是Connection.Start帧,其他帧也都是类似的(我严重怀疑写这个程序的人以前是写C的????)public static class Connection { public static final int INDEX = 10;...
MQ!Rabbit-client AMQImpl
AMQPImpl类包括AMQP接口(public class AMQImpl implements AMQP)主要囊括了AMQP协议中的通信帧的类别。
在学习 channelN
类的时候basicQos
调用的类实际是AMQImpl
的一个内部类的方法。
下面是Connection.Start帧,其他帧也都是类似的(我严重怀疑写这个程序的人以前是写C的????)
public static class Connection {
public static final int INDEX = 10;
public static class Start
extends Method
implements com.rabbitmq.client.AMQP.Connection.Start
{
public static final int INDEX = 10;
private final int versionMajor;
private final int versionMinor;
private final Map<String,Object> serverProperties;
private final LongString mechanisms;
private final LongString locales;
public int getVersionMajor() { return versionMajor; }
public int getVersionMinor() { return versionMinor; }
public Map<String,Object> getServerProperties() { return serverProperties; }
public LongString getMechanisms() { return mechanisms; }
public LongString getLocales() { return locales; }
public Start(int versionMajor, int versionMinor, Map<String,Object> serverProperties, LongString mechanisms, LongString locales) {
if (locales == null)
throw new IllegalStateException("Invalid configuration: 'locales' must be non-null.");
if (mechanisms == null)
throw new IllegalStateException("Invalid configuration: 'mechanisms' must be non-null.");
this.versionMajor = versionMajor;
this.versionMinor = versionMinor;
this.serverProperties = serverProperties==null ? null : Collections.unmodifiableMap(new HashMap<String,Object>(serverProperties));
this.mechanisms = mechanisms;
this.locales = locales;
}
public Start(MethodArgumentReader rdr) throws IOException {
this(rdr.readOctet(), rdr.readOctet(), rdr.readTable(), rdr.readLongstr(), rdr.readLongstr());
}
public int protocolClassId() { return 10; }
public int protocolMethodId() { return 10; }
public String protocolMethodName() { return "connection.start";}
public boolean hasContent() { return false; }
public Object visit(MethodVisitor visitor) throws IOException
{ return visitor.visit(this); }
public void appendArgumentDebugStringTo(StringBuilder acc) {
acc.append("(version-major=")
.append(this.versionMajor)
.append(", version-minor=")
.append(this.versionMinor)
.append(", server-properties=")
.append(this.serverProperties)
.append(", mechanisms=")
.append(this.mechanisms)
.append(", locales=")
.append(this.locales)
.append(")");
}
public void writeArgumentsTo(MethodArgumentWriter writer)
throws IOException
{
writer.writeOctet(this.versionMajor);
writer.writeOctet(this.versionMinor);
writer.writeTable(this.serverProperties);
writer.writeLongstr(this.mechanisms);
writer.writeLongstr(this.locales);
}
}
...
}
看起来代码好长好长????,但是不用怕(反正怕也得看????)。首先要注意一点内部类Start
是继承Method
类(注意!!这里的Method
类不是反射里面的那个,而是rabbitMq里面的类)。
一些属性
public static final int INDEX = 10;
private final int versionMajor;
private final int versionMinor;
private final Map<String,Object> serverProperties;
private final LongString mechanisms;
private final LongString locales;
一些get方法
public int getVersionMajor() { return versionMajor; }
public int getVersionMinor() { return versionMinor; }
public Map<String,Object> getServerProperties() { return serverProperties; }
public LongString getMechanisms() { return mechanisms; }
public LongString getLocales() { return locales; }
重要的参数:classId,MethodId,hasContent
public int protocolClassId() { return 10; }
public int protocolMethodId() { return 10; }
public boolean hasContent() { return false; }
剩下的都是对应方法中的主要信息。
下表涵盖AQMP协议各个种类的Method以及其一些属性,看完这张表就看完了AMQPImpl的全部。
Method-Name | classId | methodId | hasContent |
---|---|---|---|
Connection.Start | 10 | 10 | false |
Connection.StartOk | 10 | 11 | false |
Connection.Secure | 10 | 20 | false |
Connection.SecureOk | 10 | 21 | false |
Connection.Tune | 10 | 30 | false |
Connection.TuneOk | 10 | 31 | false |
Connection.Open | 10 | 40 | false |
Connection.OpenOk | 10 | 41 | false |
Connection.Close | 10 | 50 | false |
Connection.CloseOk | 10 | 51 | false |
Connection.Blocked | 10 | 60 | false |
Connection.Unblocked | 10 | 61 | false |
Channel.Open | 20 | 10 | false |
Channel.OpenOk | 20 | 11 | false |
Channel.Flow | 20 | 20 | false |
Channel.FlowOk | 20 | 21 | false |
Channel.Close | 20 | 40 | false |
Channel.CloseOk | 20 | 41 | false |
Access.Request | 30 | 10 | false |
Access.RequestOk | 30 | 11 | false |
Exchange.Declare | 40 | 10 | false |
Exchange.DeclareOk | 40 | 11 | false |
Exchange.Delete | 40 | 20 | false |
Exchange.DeleteOk | 40 | 21 | false |
Exchange.Bind | 40 | 30 | false |
Exchange.BindOk | 40 | 31 | false |
Exchange.Unbind | 40 | 40 | false |
Exchange.UnbindOk | 40 | 51 | false |
Queue.Declare | 50 | 10 | false |
Queue.DeclareOk | 50 | 11 | false |
Queue.Bind | 50 | 20 | false |
Queue.BindOk | 50 | 21 | false |
Queue.Purge | 50 | 30 | false |
Queue.PurgeOk | 50 | 31 | false |
Queue.Delete | 50 | 40 | false |
Queue.DeleteOk | 50 | 41 | false |
Queue.Unbind | 50 | 50 | false |
Queue.UnbindOk | 50 | 51 | false |
Basic.Qos | 60 | 10 | false |
Basic.QosOk | 60 | 11 | false |
Basic.Consume | 60 | 20 | false |
Basic.ConsumeOk | 60 | 21 | false |
Basic.Cancel | 60 | 30 | false |
Basic.CancelOk | 60 | 31 | false |
Basic.Publish | 60 | 40 | true |
Basic.Return | 60 | 50 | true |
Basic.Deliver | 60 | 60 | true |
Basic.Get | 60 | 70 | false |
Basic.GetOk | 60 | 71 | true |
Basic.GetEmpty | 60 | 72 | false |
Basic.Ack | 60 | 80 | false |
Basic.Reject | 60 | 90 | false |
Basic.RecoverAsync | 60 | 100 | false |
Basic.Recover | 60 | 110 | false |
Basic.RecoverOk | 60 | 111 | false |
Basic.Nack | 60 | 120 | false |
Tx.Select | 90 | 10 | false |
Tx.SelectOk | 90 | 11 | false |
Tx.Commit | 90 | 20 | false |
Tx.CommitOk | 90 | 21 | false |
Tx.Rollback | 90 | 30 | false |
Tx.RollbackOk | 90 | 31 | false |
Confirm.Select | 85 | 10 | false |
Confirm.SelectOk | 85 | 11 | false |
好的,完美的水了一篇 over????
本文地址:https://blog.csdn.net/qq_15351029/article/details/111952156
上一篇: 独立站如何做网站营销获得源源不断的客户
下一篇: 做网站营销推广需要注意什么呢?